Node.js NodeJS对称加密

Node.js NodeJS对称加密,node.js,encryption,Node.js,Encryption,我完全搞不懂为什么这不起作用,我得到了错误:错误:06065064:数字信封例程:EVP\u DecryptFinal\u ex:bad decrypt var crypto = require('crypto'); var key = "ciw7p02f70000ysjon7gztjn7"; var pt = "72721827b4b4ee493ac09c635827c15ce014c3c3"; var encrypt = crypto.createCipher('aes256', key)

我完全搞不懂为什么这不起作用,我得到了
错误:错误:06065064:数字信封例程:EVP\u DecryptFinal\u ex:bad decrypt

var crypto = require('crypto');
var key = "ciw7p02f70000ysjon7gztjn7";
var pt = "72721827b4b4ee493ac09c635827c15ce014c3c3";

var encrypt = crypto.createCipher('aes256', key);
encrypt.update(pt, 'utf8', 'hex');
var encrypted = encrypt.final('hex')

var decrypt = crypto.createDecipher('aes256', key);
decrypt.update(encrypted, 'hex', 'utf8')
decrypt.final()
您可以使用RunKit查看它的操作

通过

使用错误如下所示:

// yours (incorrect)
var encrypt = crypto.createCipher('aes256', key);
encrypt.update(pt, 'utf8', 'hex');
var encrypted = encrypt.final('hex')

// correct
var encrypt = crypto.createCipher('aes256', key);
var encrypted = encrypt.update(pt, 'utf8', 'hex');
encrypted += encrypt.final('hex')



// yours (incorrect)
var decrypt = crypto.createDecipher('aes256', key);
decrypt.update(encrypted, 'hex', 'utf8')
decrypt.final()

// correct
var decrypt = crypto.createDecipher('aes256', key);
var decrypted = decrypt.update(encrypted, 'hex', 'utf8')
decrypted += decrypt.final()
但由于
cipher.createCipher()
cipher.createDecipher()
现在已被弃用且不安全,因此上述解决方案使用and代替


如果您在消息开头加密共享前16个字节(或16个字节的倍数)的多个明文,则添加随机IV可以防止信息泄漏。请参见

如果错误消息完全相同,则无论帖子有多旧,我都会产生怀疑。旁注:如果加密/解密机器上的openssl版本不同,这将不起作用。是否有可能指定摘要算法?这基本上是一个单独的问题,不应将其隐藏在标题不同的问题的注释中。更新代码的演示:。我知道加密,但通常是从Python的角度。静脉注射完全正确,参见。如果您的前16个字节的明文要在多个加密明文中重复,IV可以保护您不泄露信息。使用这个精确的代码示例会导致无效的密钥长度错误。请参阅解决方案。可能该键值是专门为这个问题创建的,因为它的长度(25字节)太短,不能作为AES-256键接受,必须是32字节长。它对于使用24字节密钥的AES-192来说也太长了1字节。
// yours (incorrect)
var encrypt = crypto.createCipher('aes256', key);
encrypt.update(pt, 'utf8', 'hex');
var encrypted = encrypt.final('hex')

// correct
var encrypt = crypto.createCipher('aes256', key);
var encrypted = encrypt.update(pt, 'utf8', 'hex');
encrypted += encrypt.final('hex')



// yours (incorrect)
var decrypt = crypto.createDecipher('aes256', key);
decrypt.update(encrypted, 'hex', 'utf8')
decrypt.final()

// correct
var decrypt = crypto.createDecipher('aes256', key);
var decrypted = decrypt.update(encrypted, 'hex', 'utf8')
decrypted += decrypt.final()