node.js - NodeJS AES 256 十六进制解密错误

标签 node.js encryption cryptography aes

美好的一天。我想使用 nodejs 模块 crypto 来解码先前编码的字符串。字符串使用 AES 256 ECB 编码,我将其设置为十六进制。我所有的尝试几乎什么也没做,只是有时我得到空字符串而不是错误。我仅“需要”加密,不需要 open-ssl。

十六进制:820D4DA01CE75046C399CA314C5428C6AF8D69C6573B4DE5A6942A5277936F56
key :7y05R9qwKaIKgIHh4vAw19X1zuknR21Y

这是我的nodejs代码。

var algorithm = 'aes-256-ecb',
password = '7y05R9qwKaIKgIHh4vAw19X1zuknR21Y',
encString = '820D4DA01CE75046C399CA314C5428C6AF8D69C6573B4DE5A6942A5277936F56'

var decipher = crypto.createDecipher(algorithm,password);
var dec = decipher.update(encString,'hex','utf8');
dec += decipher.final('utf8');
console.log(dec);

我有这个错误。

Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt.

需要您的帮助。

更新

经过几个小时和来自 Maarten Bodewes 和 this topic 的无价建议,这是可行的解决方案。

var encString=req.query.d;
console.log(encString);

var algorithm = 'aes-256-ecb',
    password = new Buffer('7y05R9qwKaIKgIHh4vAw19X1zuknR21Y', 'binary');

var decipher=crypto.createDecipheriv(algorithm, password.toString('binary'), '');
decipher.setAutoPadding(false);
var dec = decipher.update(encString,'hex','utf8');
dec += decipher.final('utf8');

console.log(dec);

最佳答案

您必须将 createDecipher 与算法、 key 和 IV 参数一起使用。 IV 可能会被忽略,但为了确定起见,将其设置为 16 个零字节。如果您使用两个参数函数,则 key 将通过基于密码的 key 派生函数 (PBKDF) 进行处理。使用不正确的 key 解密当然会导致失败。

如果解密失败,请确保关闭填充,并查看生成的明文是否有意义。

关于node.js - NodeJS AES 256 十六进制解密错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29550509/

相关文章:

encryption - 人们如何着手攻击加密文件?

javax.crypto.IllegalBlockSizeException : last block incomplete in decryption

node.js - Node JS Passport google oauth 无法在 https 上工作?

node.js - 为什么 webpack 在运行 npm run dev 时会报错

c# - 具有 AES 和 rsaEncryption(PKCS#1 v1.5 填充而不是 v2(OAEP)填充)的 EnvelopedCMS 可能吗?

python - 在写入消息时对其进行加密

c# - 如何安全地处理 AES “Key” 和 “IV” 值

.net-3.5 - RSACryptoServiceProvider.ImportParameters 抛出 System.Security.Cryptography.CryptographicException : Bad Data

node.js - 单击 Electron 应用程序中的按钮以在 VLC 中启动文件?

node.js - 平均 IO : Config validation error JWT_SECRET is required