AES-128 暗号化を HLS ストリームに適用するツールに取り組んでいます。これまでの私のRubyコードは次のとおりです。
aes = OpenSSL::Cipher::AES.new(128, :CBC)
aes.encrypt
aes_key = aes.random_key
aes_iv = aes.random_iv
ここで、aes_iv を出力すると、シェル環境がテキストに変換するのに苦労している、明らかに単なるバイナリ データが得られます。それは理にかなっている。必要なのは、これを 16 進表現に変換することです。
IV は、HLS マニフェスト ファイルで次のように指定する必要があります。
#EXT-X-KEY:METHOD=AES-128,URI="crypt0.key",IV=0xdc03cfac7ea13f69dd49c1411c14c264
その行の IV 属性は次のように記述されています。
「値は、キーで使用される初期化ベクトルを指定する 16 進数の整数です。IV 属性は、プロトコル バージョン 2 で登場しました。」
2 つの問題があります。
- random_iv が HLS 仕様と互換性のある適切な IV を設定していることを確認するにはどうすればよいですか?
- バイナリ IV 出力を random_iv から必要な 16 進数値に変換するにはどうすればよいですか?
私はこれをやってみました:
aes_iv.unpack("H*")
そしてaes_iv.unpack("h*")
、これは正しいように見える「4b56da546d807eb0870170b4e03d77dd」のようなものを返します。しかし、それをIVに指定すると動画が再生できません。
random_iv を呼び出さず、「0000000000000000000000000000000」の IV を指定しないかのように、問題を IV に分離しました。