将OpenSSL IV转换为十六进制?

时间:2013-04-17 19:15:04

标签: ruby encryption openssl aes

我正在开发一种将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中。”

我有两个问题:

  1. 我如何确定random_iv正在设置与HLS规范兼容的正确IV?
  2. 如何将random_iv的二进制IV输出转换为所需的十六进制值?
  3. 我试过这样做:

    aes_iv.unpack("H*")aes_iv.unpack("h*"),返回类似“4b56da546d807eb0870170b4e03d77dd”的内容,似乎是正确的。但是,当我指定为IV时,视频无法播放。

    我已将问题隔离到IV,好像我没有调用random_iv并指定IV为“00000000000000000000000000000000”,它可以工作。

1 个答案:

答案 0 :(得分:0)

好吧,看起来我能够使用aes_iv.unpack(“H *”)让它工作。我想我正在查看早期失败试验中的一些较旧的视频文件。

我对H *为什么起作用而h *不起作用很无能为力。我在这里看到它有一个描述:http://apidock.com/ruby/String/unpack,它解释了低半字节与高半字节之间的区别,但不确定这里有什么区别。