我正在开发一种将 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 时,它给了我很明显只是我的 shell 环境难以转换为文本的二进制数据。那讲得通。我需要将其转换为十六进制表示。
IV 必须在 HLS 清单文件中指明,如下所示:
#EXT-X-KEY:METHOD=AES-128,URI="crypt0.key",IV=0xdc03cfac7ea13f69dd49c1411c14c264
该行的 IV 属性描述如下:
“该值是一个十六进制整数,它指定要与密钥一起使用的初始化向量。IV 属性出现在协议版本 2 中。”
我有两个问题:
- 如何确定 random_iv 设置的 IV 与 HLS 规范兼容?
- 如何将二进制 IV 输出从 random_iv 转换为所需的十六进制值?
我试过这样做:
aes_iv.unpack("H*")
和aes_iv.unpack("h*")
,它返回类似“4b56da546d807eb0870170b4e03d77dd”的东西,这似乎是正确的。但是,当我将其指定为 IV 时,无法播放视频。
我已将问题隔离到 IV,就好像我没有调用 random_iv 并指定“000000000000000000000000000000000”的 IV,它可以工作。