使用 UTF-8 字符更正 SHA256 实现

Correct SHA256 implementation with UTF-8 characters

我 运行 比较不同 languages/functions 生成的 SHA256 哈希的问题。

例如,SHA256("í") returns:

f3df1f9c358ae8eceb8fce7c00614288d113ad55315f4ebb909774a7daadfc84

-或-

127035a8ff26256ea0541b5add6dcc3ecdaeea603e606f84e0fd63492fbab2c5

对于只有一个字符的字符串,以上哪个哈希是正确的,处理 UTF-8 字符串的正确方法是什么?

Which of the above hash is correct for a string of one character

没有"correct"答案。被散列的是 字节 ,而不是 "character"。对哪些字节进行哈希处理完全取决于字符串的编码。

"í" in Windows-1252 是字节 ED,其散列为:

f3df1f9c358ae8eceb8fce7c00614288d113ad55315f4ebb909774a7daadfc84

"í" 在 UTF-8 中是字节 C3 AD,其散列为:

127035a8ff26256ea0541b5add6dcc3ecdaeea603e606f84e0fd63492fbab2c5

"í" 在 UTF-16LE 中是字节 ED 00,其散列为:

430e2ca27910b5ee6e0ec56a12b81325c763376cb8e25a60362dce9444424f95

它在各种编程语言中的具体工作方式取决于它们用于字符串的语言和编码。