【问题标题】:NodeJS AES 256 hex decrypt errorNodeJS AES 256 hex 解密错误
【发布时间】:2015-04-10 17:19:57
【问题描述】:

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

十六进制: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);

【问题讨论】:

  • 不要在问题中发布解决方案。您可以自己发布答案。
  • @ArtjomB。你当然是对的。在这种情况下,尽管对于问题的本地化部分,它似乎主要是对我的回答的一种锻炼。就我个人而言,我更喜欢有人根据我的建议发布答案并接受它:) BadVolt,另一种选择是将代码编辑到 answer 而不是问题中,以证明答案有效。很高兴你解决了...

标签: node.js encryption cryptography aes


【解决方案1】:

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

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

【讨论】:

  • 结果对我来说当然没有意义。如果没有加密例程,这可能很难解决。
  • 恐怕没有帮助。现在我有错误:IV 长度无效;使用这个。 var iv = new Buffer([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);
猜你喜欢
  • 1970-01-01
  • 2021-06-04
  • 1970-01-01
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 2019-01-20
相关资源
最近更新 更多