将对象加密为 JSON 格式效果不佳

encrypt object as JSON format not working well

我尝试用密码加密数据(json 格式),

这是我的代码:

const crypto = require('crypto');

let data = {
    aaa: "aaa",
    bbb: "bbb"};

let jsonData = JSON.stringify(data, null, 2);
 encrypt(jsonData);

function encrypt(data) {
    let hmac = crypto.createHmac('sha1', 'abc');
    console.log(data);
    hmac.update(data);
    let key = hmac.digest('hex');
    console.log(key);
}

日志:

{
  "aaa": "aaa",
  "bbb": "bbb"
}
820c9d3d82a9a8fc1cc0352929ccccdfd945c5d0

当我从日志中复制数据并将其粘贴到 this site 时,我得到了另一个签名:

怎么了?

如果删除所有换行符和空格:

{"aaa":"aaa","bbb":"bbb"}

该网站将计算哈希值:

61b23e04f44fd7dcfcfe9acf5fcb9381179538f7

这与将第三个参数设置为 0 时在程序中得到的结果相同。

let jsonData = JSON.stringify(data, null, 0);

所以问题是哈希函数的不同输入。

发现问题了,一加:

.replace (/\n/ g, '\r\n')

它运行良好。

固定代码如下:

function encrypt(data) {
    let hmac = crypto.createHmac('sha1', 'abc');
    console.log(data);
    hmac.update(data.replace(/\n/g, '\r\n'));
    let key = hmac.digest('hex');
    console.log(key);
    console.log("#################################################");
}