1

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 つの問題があります。

  1. random_iv が HLS 仕様と互換性のある適切な IV を設定していることを確認するにはどうすればよいですか?
  2. バイナリ IV 出力を random_iv から必要な 16 進数値に変換するにはどうすればよいですか?

私はこれをやってみました:

aes_iv.unpack("H*")そしてaes_iv.unpack("h*")、これは正しいように見える「4b56da546d807eb0870170b4e03d77dd」のようなものを返します。しかし、それをIVに指定すると動画が再生できません。

random_iv を呼び出さず、「0000000000000000000000000000000」の IV を指定しないかのように、問題を IV に分離しました。

4

1 に答える 1