"key must be 16 bytes" AES-128 全血细胞计数,带 MD5 密钥+IV



我正在与一个API进行交互,该API需要我在CBC模式下使用AES-128加密内容。

他们说的是钥匙和IV,我需要使用他们给我的16字节MD5哈希。

我已经谷歌搜索了一段时间,看来所有MD5都是16个字节,那么为什么这不起作用?

  key = Digest::MD5.hexdigest(temp_token)
  cipher = OpenSSL::Cipher::AES.new(128, :CBC)
  cipher.encrypt
  cipher.key = key # ArgumentError: key must be 16 bytes
  cipher.iv = key # ArgumentError: iv must be 16 bytes
  encrypted = cipher.update(joined_params) + cipher.final
  Base64.urlsafe_encode64(encrypted)

我认为根本原因是OpenSSL::Cipher::AES#key必须将16字节字符串作为其键。

[27] pry(main)> cipher = OpenSSL::Cipher::AES.new(128, :CBC)
=> #<OpenSSL::Cipher::AES:0x00007f7f876f1608>
[28] pry(main)> cipher.encrypt
=> #<OpenSSL::Cipher::AES:0x00007f7f876f1608>
[30] pry(main)> cipher.random_key.length
=> 16

它与Digest::MD5.hexdigest

无关
[26] pry(main)> key = Digest::MD5.hexdigest('abc').first(16)
=> "900150983cd24fb0"
[27] pry(main)> cipher = OpenSSL::Cipher::AES.new(128, :CBC)
=> #<OpenSSL::Cipher::AES:0x00007f7f876f1608>
[28] pry(main)> cipher.encrypt
=> #<OpenSSL::Cipher::AES:0x00007f7f876f1608>
[29] pry(main)> cipher.key = key
=> "900150983cd24fb0"

参考:openssl :: cipher

问题是我需要使用Digest::MD5.digest

最新更新