gpt4 book ai didi

javascript - NodeJS aes 解密不工作

转载 作者:行者123 更新时间:2023-11-29 21:13:23 27 4
gpt4 key购买 nike

我使用在线工具使用 AES 进行加密。我正在使用我的模块进行解密。但我得到的结果不一样。为什么?

我使用其中一种工具进行加密:

这是我提供的数据:

  • 这是要加密的文本:Hello World
  • 这是密码:12345
  • 这是工具的结果:U2FsdGVkX19HLG+YDMe3kYl+MYwEMlnC5mK78s3rZZg=

现在我尝试使用 node 解密它,但它没有给我相同的结果。但一切正常

var crypto = require('crypto'),
algorithm = 'aes-128-ctr',
password = '12345';

module.exports.decrypt=function(text){
var decipher = crypto.createDecipher(algorithm,password)
var dec = decipher.update(text,'base64','utf8')
dec += decipher.final('utf8');
return dec;
}

text=module.exports.decrypt('U2FsdGVkX1+OOp0KE3lv6qcKQeS/JDFPF8YhgdU131o=')
text

我尝试更改为 AES-192,但遇到了同样的问题。


更新:(基于 zaph 响应)

这是我在这里输入的新数据:https://www.tools4noobs.com/online_tools/encrypt/

  • key :0123456789abcdef(16 字节)Rijndael-128。模式:CBC。编码:十六进制。
  • 这是结果:8b25e846b6a2d52ad87f38f8134906c3

我无法解密它。这是我的代码:

var crypto = require('crypto'),
algorithm = 'aes-128-cbc',
password = '0123456789abcdef';

module.exports.decrypt=function(text){
var decipher = crypto.createDecipher(algorithm,password)
var dec = decipher.update(text,'hex','utf8')
dec += decipher.final('utf8');
return dec;
}
if(!module.parent){
var text=module.exports.decrypt('8b25e846b6a2d52ad87f38f8134906c3')
console.log(text)
}

最佳答案

使用精确长度的加密 key 以避免非标准填充(处理不正确长度的 key 没有标准)。 AES 支持 128 192 和 256 位长度的密码(16、24 和 32 字节)。显然 12345 不符合支持的密码长度。

一般最好不要用CTR模式,很容易出错。问题是必须永远 重复使用相同的 key 和计数器。通常 CBC 模式与随机 IV 一起使用,PKCS#7 填充用于容纳不是 block 大小倍数的输入。

输出 U2FsdGVkX19HLG+YDMe3kYl+MYwEMlnC5mK78s3rZZg= 是 Base 编码的 32 字节,是 block 大小的两倍,因此输出中除了加密数据之外还有其他内容。

将密码和文本输入 https://www.tools4noobs.com/online_tools/encrypt/在 CTR 模式下的 Rijndael-128(这是 AES)中产生 53TI1is8kfYkztQ=,而不是问题中的结果。请注意,此工具使用的 mcrypt 仅支持非标准填充。

关于javascript - NodeJS aes 解密不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40638603/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com