0

我正在尝试计算字符串的哈希值。我发现结果会根据我使用的方法而变化。

在这个网页https://codebeautify.org/md5-hash-generator

如果我使用在文本字段中写入字符串的表单:

16120&{"number":"4545","params":"{\"locale\":\"en_EN\"}"} 

我得到 26528d6e0e802d5569e2e03fde0a825c。但是,如果我这样做

CryptoJS.MD5('16120&{"number":"4545","params":"{\"locale\":\"en_EN\"}"}').toString();

结果是 fe31f378efcc4ae4de71e70278991741。

如果我使用像 1234 这样的简单字符串,我会得到相同的结果,但使用上面的字符串我不会,所以我猜问题是转义条或其他问题,但我找不到解决方案。

4

3 回答 3

1

用于转义字符串的反斜杠只能在代码中使用,因为它们不会成为结果字符串的一部分。请参阅w3schools ->“转义字符”一章。尝试执行console.log('\"')以了解这一点,它会导致仅记录一个双引号 ( ")。

因此,如果您删除这些转义字符并在输入中插入字符串(既不需要也不支持转义),哈希值将相等。

于 2021-01-31T13:09:09.023 回答
1

在您的 JS 代码中,JS 正在转义引号。该网站没有逃脱。所以你在散列不同的东西,因此不同的散列结果。

于 2021-01-31T13:11:43.130 回答
0

第二种情况下的反斜杠需要加倍。一次用于 JavaScript,一次用于 JSON。

CryptoJS.MD5('16120&{"number":"4545","params":"{\\"locale\\":\\"en_EN\\"}"}').toString();
于 2021-01-31T13:08:48.953 回答