使用 node.js 从使用 php/mcrypt 创建的 AES-ECB 密文解密
Decrypt from AES-ECB ciphertext created with php/mcrypt using node.js
我有一条使用 MCRYPT_RIJNDAEL_128、ECB 模式和 Base64 的加密消息,我尝试使用 crypto(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: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt'
如果客户要求使用密钥长度为 32 的 ECB,我该如何使这种情况有效?
AES 是 Rijndael 的一个子集,具有 128 位的固定块大小,而 Rijndael 支持 128、192 和 256 位的块大小。 MCRYPT_RIJNDAEL_128
中的128
表示块大小。另一方面,aes-128-ecb
中的 128
表示密钥大小。 AES 和 Rijndael 都支持 128、192 和 256 位的密钥大小。
如果您有一个 32 个字符的密钥,并且此密钥未进行十六进制编码以达到这 32 个字符,那么您可能真的想要 aes-256-ecb
.
请记住,密钥编码可能与 PHP 中的不同,因此可能需要将密钥解析为具有特定编码的 Buffer
。
此外,请不要使用 ECB 模式。这是不安全的。您应该至少使用带有随机 IV 的 CBC 模式。由于 IV 不需要保密,您可以简单地将它与密文一起作为前缀发送。然后,您需要在解密之前将其切掉。
我有一条使用 MCRYPT_RIJNDAEL_128、ECB 模式和 Base64 的加密消息,我尝试使用 crypto(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: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt'
如果客户要求使用密钥长度为 32 的 ECB,我该如何使这种情况有效?
AES 是 Rijndael 的一个子集,具有 128 位的固定块大小,而 Rijndael 支持 128、192 和 256 位的块大小。 MCRYPT_RIJNDAEL_128
中的128
表示块大小。另一方面,aes-128-ecb
中的 128
表示密钥大小。 AES 和 Rijndael 都支持 128、192 和 256 位的密钥大小。
如果您有一个 32 个字符的密钥,并且此密钥未进行十六进制编码以达到这 32 个字符,那么您可能真的想要 aes-256-ecb
.
请记住,密钥编码可能与 PHP 中的不同,因此可能需要将密钥解析为具有特定编码的 Buffer
。
此外,请不要使用 ECB 模式。这是不安全的。您应该至少使用带有随机 IV 的 CBC 模式。由于 IV 不需要保密,您可以简单地将它与密文一起作为前缀发送。然后,您需要在解密之前将其切掉。