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

时间:2019-11-22 15:44:24

标签: javascript node.js ajax encryption cryptojs

我在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数据

谢谢您的指导

1 个答案:

答案 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