His*_*shi 2 php ruby encryption
我需要使用'rijndael-128-cbc'算法解密由php加密的数据。
现在我在将 php 代码转换为 ruby 代码时遇到了问题。ruby OpenSSL::Cipher 不支持 rijndael-128-cbc 然后我使用“aes-128-cbc”。我听说 AES 基于 Rijndael 密码,所以我想我可以将 rijndael-128-cbc' 的解密转换为 AES-128-CBC。
enc = OpenSSL::Cipher.new "AES-128-CBC"
enc.encrypt
puts enc.key_len
Run Code Online (Sandbox Code Playgroud)
它的输出是 16
然而,在 php
echo mcrypt_get_key_size('rijndael-128', 'cbc')
Run Code Online (Sandbox Code Playgroud)
这得到 32
“rijndael-128”和“AES-128-CBC”之间有什么区别吗?
以及如何将 rijndael-128-cbc 描述转换为 ruby?
我不是 Ruby 开发人员,所以我无法帮助您处理 ruby 代码,但我可以给您一些关于 Rijndael 和 PHP 的 mcrypt 扩展的建议......
是的,AES 基于 Rijndael-128,因此 Rijndael-128 和 AES-128 是一回事。
重要的是要注意 Rijndael 变体中的数字指的是密码的块大小,而对于 AES - 它是密钥大小,因此(例如)Rijndael-192 不是 AES-192;AES 的块大小始终为 16 字节或 128 位。
也就是说,Rijndael-128 也可以是 AES-192 和 AES-256,区别仅在于密钥大小。
如 PHP 手册中所述mcrypt_get_key_size(),该函数返回所提供密码的最大密钥长度...
AES-256 == Rijndael-128 with a 32-byte key
Run Code Online (Sandbox Code Playgroud)
这就是它返回 32 的原因。对于 AES-128,密钥大小当然是 16 - 您可以对其进行硬编码。
希望这会为您清除一点。