2016-09-20 49 views
1

我遇到了比較由不同語言/函數生成的SHA256哈希的問題。使用UTF-8字符更正SHA256的實現

例如,SHA256("í")或者返回:

f3df1f9c358ae8eceb8fce7c00614288d113ad55315f4ebb909774a7daadfc84 

- 或 -

127035a8ff26256ea0541b5add6dcc3ecdaeea603e606f84e0fd63492fbab2c5 

其中上述散列是一個字符的字符串正確的,什麼是處理UTF的正確方法-8串?

+1

沒有「UTF-8字符」這樣的東西。有Unicode字符,如果您願意,可以將其編碼爲UTF-8。你根本沒有告訴我們你感興趣的是什麼語言,但基本上這個過程將是使用你選擇的編碼(例如UTF-8)將字符串編碼爲二進制數據,取得SHA-256哈希值,以及然後使用十六進制或base64將該散列轉換回字符串。 –

回答

3

其中上述散列是一個字符

沒有「正確」答案的字符串正確。什麼是散列是字節,而不是「字符」。什麼字節被散列完全取決於字符串的編碼。

在Windows 1252 "í"是字節ED,其如散列:

f3df1f9c358ae8eceb8fce7c00614288d113ad55315f4ebb909774a7daadfc84 

"í"以UTF-8字節C3 AD,其如散列:

127035a8ff26256ea0541b5add6dcc3ecdaeea603e606f84e0fd63492fbab2c5 

"í"在UTF-16LE是字節ED 00,其散列爲:

430e2ca27910b5ee6e0ec56a12b81325c763376cb8e25a60362dce9444424f95 

在各種編程語言中的工作原理取決於語言和它們用於字符串的編碼。