AJAX 调用中的加密 JS 纯文本解密错误



我在我的NodeJS应用程序中使用crypto-js纯文本加密/解密。当我在服务器端测试以下代码时,一切按预期工作:

var encrypted_string = CryptoJS.AES.encrypt(input_string, '123Key');
var bytes  = CryptoJS.AES.decrypt(encrypted_key.toString(), '123Key');
var decryted_string = bytes.toString(CryptoJS.enc.Utf8);

但是,当我通过 AJAX 调用发送encrypted_string时,出现错误

我的 AJAX 调用代码在这里:

let data = {}
data.encrypted_string = 'foo';
$.ajax({
type: 'POST',
data: JSON.stringify(data),
contentType: 'application/json',
url: '/route/to/',
success:function(response_data_json) {
// do something
}
}
})

在路由代码中:

var ciphertext = req.body.encrypted_string
var bytes  = CryptoJS.AES.decrypt(ciphertext.toString(), '123Key');
var decryted_string = bytes.toString(CryptoJS.enc.Utf8);

我在字节上收到错误...线

格式错误的 UTF-8 数据

提前感谢您的任何指导

首先我注意到一个小错别字:c <> n var ecnrypted_string = Cry...

但是,这不是问题的根源。

您可能缺少的是服务器上的 JSON.decode,因为您的密文 var 仍然包含您从客户端发送的确切字符串,您可以看到如下所示:

let data = {};
data.encrypted_string = 'foo';
let stringified = JSON.stringify(data);
console.log(stringified);
console.log(stringified.toString());

两个日志的输出都是:{"encrypted_string":"foo"},当然不能由CryptoJS直接解析。

希望这有帮助。 最好 塞博

最新更新