UTF-8字符的SHA256实现正确方法

3
我遇到了一个问题,就是比较由不同语言/函数生成的SHA256哈希值。
例如,SHA256("í")返回以下结果之一:
f3df1f9c358ae8eceb8fce7c00614288d113ad55315f4ebb909774a7daadfc84

-or-

127035a8ff26256ea0541b5add6dcc3ecdaeea603e606f84e0fd63492fbab2c5

以上哈希值中,哪个适用于一个字符的字符串?处理 UTF-8 字符串的正确方式是什么?

2
不存在所谓的“UTF-8字符”。有Unicode字符,如果需要,它们可以被编码为UTF-8。您并没有告诉我们您感兴趣的语言是什么,但基本上,该过程将是使用您选择的编码(例如UTF-8)将字符串编码为二进制数据,对其进行SHA-256哈希,然后使用十六进制或base64将该哈希转换回字符串。 - Jon Skeet
1个回答

7
上述哈希中哪个是用于一个字符的正确哈希?
没有“正确”的答案。被哈希的是字节,而不是“字符”。确切被哈希的字节取决于字符串的编码。
在Windows-1252编码中,“í”的字节为“ED”,它被哈希为:
f3df1f9c358ae8eceb8fce7c00614288d113ad55315f4ebb909774a7daadfc84

在UTF-8中,"í"表示为字节C3 AD,它的哈希值为:
127035a8ff26256ea0541b5add6dcc3ecdaeea603e606f84e0fd63492fbab2c5

"í"在UTF-16LE中对应的字节是ED 00,它的哈希结果为:

430e2ca27910b5ee6e0ec56a12b81325c763376cb8e25a60362dce9444424f95

在各种编程语言中,如何实现这一点取决于语言以及它们用于字符串的编码方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接