如何解密用 ruby​​ 中的“rijndael-128-cbc”加密的数据

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​​?

Nar*_*arf 5

我不是 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 - 您可以对其进行硬编码。

希望这会为您清除一点。