Javascript 如何使用CryptoJS AES解密消息?我有一个工作节点加密示例
我可以使用节点的加密库解密AES加密的消息,如下所示Javascript 如何使用CryptoJS AES解密消息?我有一个工作节点加密示例,javascript,encryption,cryptojs,Javascript,Encryption,Cryptojs,我可以使用节点的加密库解密AES加密的消息,如下所示 const crypto = require('crypto'); const encryptedData = 'b6ab428efbcb93c2f483178114ac0608530e54428f1378c6d3be108531b730d1888e562044cd3acb8844a04d9d7602d83b96f0a758248ffd07cd9c530b76c91c'; const decryptResponse2 = (data) =&
const crypto = require('crypto');
const encryptedData = 'b6ab428efbcb93c2f483178114ac0608530e54428f1378c6d3be108531b730d1888e562044cd3acb8844a04d9d7602d83b96f0a758248ffd07cd9c530b76c91c';
const decryptResponse2 = (data) => {
const key = 'F5:A4:F4:AB:BF:68:CF:86:51:B4:AA';
const iv = Buffer.from(data.substring(0, 32), 'hex');
const payload = data.substring(32);
const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv).setAutoPadding(false);
const decipherFinal = decipher.update(payload, 'hex', 'utf8') + decipher.final('utf8');
console.log(decipherFinal);
};
decryptResponse2(encryptedData);
我使用crypto js
库创建了一个脚本,因为它可以在浏览器中使用。我尝试的代码如下:
const crypto = require('crypto-js');
const encryptedData = 'b6ab428efbcb93c2f483178114ac0608530e54428f1378c6d3be108531b730d1888e562044cd3acb8844a04d9d7602d83b96f0a758248ffd07cd9c530b76c91c';
const decryptResponse = (data) => {
const key = 'F5:A4:F4:AB:BF:68:CF:86:51:B4:AA';
const iv = Buffer.from(data.substring(0, 32), 'hex');
const payload = data.substring(32);
let decryptedData = crypto.AES.decrypt(
payload,
key,
{
iv: iv,
mode: crypto.mode.CBC,
padding: crypto.pad.NoPadding
});
console.log(decryptedData.toString());
}
decryptResponse(encryptedData);
然而,它不仅生成了错误的解密数据,解密的消息甚至不一致。我不知道我做错了什么,因为我对加密和解密知之甚少
任何帮助都将被引用。感谢@GrafiCode将我指向,我能够使用config对象的
format
属性解决它
代码如下:
const crypto = require('crypto-js');
const encryptedData = 'b6ab428efbcb93c2f483178114ac0608530e54428f1378c6d3be108531b730d1888e562044cd3acb8844a04d9d7602d83b96f0a758248ffd07cd9c530b76c91c';
const decryptResponse = (data) => {
const key = crypto.enc.Utf8.parse('F5:A4:F4:AB:BF:68:CF:86:51:B4:AA');
const iv = crypto.enc.Hex.parse(data.substring(0, 32));
const payload = data.substring(32);
let decryptedData = crypto.AES.decrypt(
payload,
key,
{
iv: iv,
mode: crypto.mode.CBC,
// padding: crypto.pad.NoPadding,
format: crypto.format.Hex
});
console.log(crypto.enc.Utf8.stringify(decryptedData));
}
decryptResponse(encryptedData);
我注释掉了
padding:crypto.pad.noadding
,因为在启用解密数据时,解密数据的末尾有不可打印的字符。请在github上查看此答案:@GrafiCode谢谢。这帮了大忙。解析utf8中的密钥,以十六进制解析iv,并以十六进制传递格式,解决了我的问题并生成了正确的解密数据。很高兴听到您解决了:)请自行回答您的问题,并记住尽可能接受它。