NodeJS AES 256十六进制解密错误

时间:2015-04-09 23:00:01

标签: node.js encryption cryptography aes

美好的一天。我想使用nodejs模块加密来解码以前编码的字符串。字符串使用AES 256 ECB编码,我将其作为十六进制编码。我所有的尝试几乎都没有,只是有时我得到空字符串而不是错误。我要求'只有加密,没有open-ssl。

HEX :820D4DA01CE75046C399CA314C5428C6AF8D69C6573B4DE5A6942A5277936F56
密钥: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);

1 个答案:

答案 0 :(得分:2)

您必须使用createDecipher算法,键和IV参数。 IV很可能被忽略,但确定为16个零字节。如果使用两个参数函数,则密钥将通过基于密码的密钥派生函数(PBKDF)。当然,使用错误密钥进行解密会导致失败。

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