我在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调用发送加密字符串时,出现错误
我的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);
我在bytes.toString ...行上收到错误
格式错误的UTF-8数据
谢谢您的指导
答案 0 :(得分:0)
首先我注意到一个小错字: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直接解析。
希望这会有所帮助。 最好, Sebo