使用node.js从使用php / mcrypt创建的AES-ECB密文解密

时间:2015-10-02 22:07:40

标签: php node.js encryption aes

我有使用MCRYPT_RIJNDAEL_128,ECB模式和Base64的加密消息,我尝试使用加密(https://www.npmjs.com/package/crypto)使用以下代码进行解密:

var text = '';
var decipher = crypto.createDecipheriv("aes-128-ecb","SOMEKEYHEREWITHLENGTH32ooooooooo", '');
text += decipher.update(data, "base64");
text += decipher.final();

我得到的错误是:密钥长度无效32。

钥匙的长度应该是多少?当我尝试使用16而不是抛出的错误是: ' TypeError:错误:06065064:数字信封例程:EVP_DecryptFinal_ex:bad decrypt'

如果客户要求使用长度为32的密钥的ECB,我该如何使这个案例有效?

1 个答案:

答案 0 :(得分:1)

AES是Rijndael的一个子集,固定块大小为128位,而Rijndael支持128,192和256位的块大小。 128中的MCRYPT_RIJNDAEL_128表示块大小。另一方面,128中的aes-128-ecb表示密钥大小。 AES和Rijndael都支持128,192和256位的密钥大小。

如果你有一个32个字符的密钥并且这个密钥没有经过十六进制编码以达到这32个字符,那么你可能真的想要aes-256-ecb

请记住,密钥编码可能与PHP中的不同,因此可能需要将密钥解析为具有特定编码的Buffer

此外,请不要使用ECB模式。这是不安全的。您应该至少使用CBC模式和随机IV。由于IV不需要保密,因此您可以将其与密文一起作为前缀发送。然后,您需要在解密之前将其切掉。

相关问题