【问题标题】:Convert OpenSSL IV to hex?将 OpenSSL IV 转换为十六进制?
【发布时间】:2013-04-18 04:09:02
【问题描述】:

我正在开发一种将 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 环境难以转换为文本的二进制数据。那讲得通。我需要将其转换为十六进制表示。

必须在 HLS 清单文件中指明 IV:

#EXT-X-KEY:METHOD=AES-128,URI="crypt0.key",IV=0xdc03cfac7ea13f69dd49c1411c14c264

该行的 IV 属性是这样描述的:

"该值是一个十六进制整数,指定要与密钥一起使用的初始化向量。IV 属性出现在协议版本 2 中。"

我有两个问题:

  1. 如何确定 random_iv 设置的 IV 与 HLS 规范兼容?
  2. 如何将二进制 IV 输出从 random_iv 转换为所需的十六进制值?

我试过这样做:

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

我已将问题隔离到 IV,好像我不调用 random_iv 并指定“000000000000000000000000000000000”的 IV,它可以工作。

【问题讨论】:

    标签: ruby encryption openssl aes


    【解决方案1】:

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

    我对为什么 H* 有效而 h* 无效一无所知。我看到这里有一个描述:http://apidock.com/ruby/String/unpack,它解释了低半字节与高半字节的区别,但不确定这里有什么区别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 2015-11-11
      • 2013-07-20
      相关资源
      最近更新 更多