我正在开发一种将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 env难以翻译成文本的二进制数据。那讲得通。我需要的是将其转换为十六进制表示。
必须在HLS清单文件中指明IV:
#EXT-X-KEY:METHOD=AES-128,URI="crypt0.key",IV=0xdc03cfac7ea13f69dd49c1411c14c264
该行的IV属性描述如下:
“该值是一个十六进制整数,指定与密钥一起使用的初始化向量.IV属性出现在协议版本2中。”
我有两个问题:
我试过这样做:
aes_iv.unpack("H*")
和aes_iv.unpack("h*")
,返回类似“4b56da546d807eb0870170b4e03d77dd”的内容,似乎是正确的。但是,当我指定为IV时,视频无法播放。
我已将问题隔离到IV,好像我没有调用random_iv并指定IV为“00000000000000000000000000000000”,它可以工作。
答案 0 :(得分:0)
好吧,看起来我能够使用aes_iv.unpack(“H *”)让它工作。我想我正在查看早期失败试验中的一些较旧的视频文件。
我对H *为什么起作用而h *不起作用很无能为力。我在这里看到它有一个描述:http://apidock.com/ruby/String/unpack,它解释了低半字节与高半字节之间的区别,但不确定这里有什么区别。