3

我一直在 PHP 中为我的 API 广泛使用 Rijndael 256 位加密,并希望将它用于我的用 JavaScript 编写的 API 包装器,但我一直无法找到与 PHP 中获得相同结果的解决方案.

PHP 的含义如下:

base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$password,$secretInformation,MCRYPT_MODE_CBC,$iv));

base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$password,$secretInformation,MCRYPT_MODE_EBC));

..以及解密变体。

我知道许多 256 位 AES 库没有得到与 PHP 使用 Rijndael 256 位加密相同的结果,因此我想知道是否有一个库能够执行 PHP 在上面的示例中所做的事情?

谢谢!

4

1 回答 1

1

MCRYPT_RIJNDAEL_256 不是具有 256 位密钥的 AES,它基本上是具有 256 位块大小的“AES”(AES 通常具有 128 位块大小)。Rinjdael 有很多选项,并通过将这些选项减少到仅 128 或 256 位密钥大小来标准化为 AES。因此,库必须支持标准(AES)而不是原型。

如果您想要 AES 256 或 128 (几乎所有库都实际支持),请使用 MCRYPT_RIJNDAEL_128 和 128 位或 256 位密钥。块大小的差异在安全方面并没有太大的区别。

此外,使用原始密码作为密钥是一个非常糟糕的主意。您可以使用基于密码的密钥派生函数(如 PBKDF2)从密码中获取密钥。

于 2012-05-03T03:21:00.957 回答