我已经在PHP中广泛使用Rijndael 256bit加密作为我的API,并希望将它用于我用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 256bit加密相同的结果,因此我想知道是否有一个库能够像上面的例子中那样做PHP?
谢谢!
答案 0 :(得分:1)
MCRYPT_RIJNDAEL_256不是具有256位密钥的AES,其基本上是“AES”,具有256位块大小(AES通常具有128位块大小)。 Rinjdael有很多选项,并通过将这些选项减少到128或256位密钥大小而标准化为AES。因此,库必须支持标准(AES)而不是原型。
如果您想要AES 256或128,这几乎是所有库实际支持的,请使用带有128位或256位密钥的MCRYPT_RIJNDAEL_128。块大小的差异实际上并没有太大的安全性。
此外,使用原始密码作为密钥是一个非常糟糕的主意。您可以使用基于密码的密钥派生函数(如PBKDF2)从密码中获取密钥。