7
A
回答
10
要獲得散列,請使用System.Security.Cryptography.SHA1Managed
class。
編輯:像這樣:
byte[] hashBytes = new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(str));
到哈希轉換爲十六進制字符串,使用下面的代碼:如果你想有一個更快的實現
BitConverter.ToString(hashBytes).Replace("-", "");
,使用下面的函數:
private static char ToHexDigit(int i) {
if (i < 10)
return (char)(i + '0');
return (char)(i - 10 + 'A');
}
public static string ToHexString(byte[] bytes) {
var chars = new char[bytes.Length * 2 + 2];
chars[0] = '0';
chars[1] = 'x';
for (int i = 0; i < bytes.Length; i++) {
chars[2 * i + 2] = ToHexDigit(bytes[i]/16);
chars[2 * i + 3] = ToHexDigit(bytes[i] % 16);
}
return new string(chars);
}
1
這是一些sample code這樣做。
1
我還不能評論,沒有足夠的代表,但Lior將Java與C#混合在一個非常錯誤的答案中。
C#中的字節是一個無符號字節,與C#中所有其他整數類型完全相反,它們是默認簽名的。
0xFF部分是完全沒有意義的,因爲即使字節被簽名,0xFE例如是-2。例如,使用按位,並且使用0xFE和0xFF,不會停止負數0xFE作爲結果。 0x7F會。
關於最上面的答案,我很肯定這些微優化可能會有所幫助,儘管它們是微優化,可能不會產生任何實際差異,因爲JIT編譯器可能只是做別的事情,因爲電腦太快了。
chars[2 * i + 2] = ToHexDigit(bytes[i]/16);
chars[2 * i + 3] = ToHexDigit(bytes[i] % 16);
小改變使它使用bitshift和bitwise ops而不是分頻器和模數。
chars[2 * i + 2] = ToHexDigit((bytes[i] >> 4) & 0xF);
chars[2 * i + 3] = ToHexDigit(bytes[i] & 0xF);
這是另一個「優化」,雖然我認爲它是一個更可讀的東西。也許這是因爲我深知大部分ASCII表格。
private static char ToHexDigit(int i)
{
return (char)(i + (i < 10 ? 48 : 55));
}
如果你想實現小寫十六進制(不ToLower將),只是交換55 87.這使得它很簡單。
更新:它看起來像利奧或有人刪除了他非常關閉的答案。這是一個很好的舉措。
相關問題
- 1. SHA1哈希十六進制字符串
- 2. 將字符串轉換爲十六進制到十六進制
- 3. 轉換十六進制字符串十六進制值
- 4. 轉換base64'd SHA1哈希爲十六進制哈希
- 5. 字符串爲十六進制和十六進制轉換爲字符串
- 6. JAVA轉換十六進制字符串
- 7. 十六進制ASCII字符串轉換
- 8. 在SQL Server中將字符串校驗和哈希轉換爲十六進制
- 9. 從十六進制字符串轉換爲十六進制字符數組
- 10. 從字符串爲十六進制的MD5哈希和背部
- 11. 如何將十六進制字符串轉換爲十進制?
- 12. 十進制數字符串轉換爲十六進制的字符串
- 13. C#字符串爲十六進制,十六進制到字節轉換
- 14. C# - 轉換十六進制值的字符串爲十六進制
- 15. 將ASCII字符轉換爲十六進制轉義字符串
- 16. 字符串轉換爲從ANSI /十六進制字符串
- 17. 將十六進制字符串轉換爲字符串
- 18. Swift3將字符串值轉換爲十六進制字符串
- 19. 轉換十六進制字符串轉換爲十進制在C++
- 20. 如何將十六進制字符串轉換爲十六進制?
- 21. 如何轉換十六進制字符串爲十六進制數
- 22. 轉換十六進制字符串爲二進制的SQL Server
- 23. 將字符串轉換爲十六進制的字符集?
- 24. 「?」十六進制字符串轉換中的字符
- 25. 十六進制轉換成Unicode字符
- 26. 轉換十六進制轉換爲字符串
- 27. 轉換字符串數組轉換爲十六進制陣列
- 28. Python從二進制字符串轉換爲十六進制
- 29. 從六進制十進制值轉換爲字符串
- 30. 將二進制長字符串轉換爲十六進制c#
爲什麼downvote?順便說一句csharp-online.net有一些很酷的東西.. – russau 2009-09-17 01:47:21
鏈接現在已經死了。 – Yablargo 2016-04-06 21:00:46