簡體   English   中英

SHA256哈希計算

[英]SHA256 hash calculation

對於我的雇主,我必須為他們下載的某些文件的網絡應用程序客戶提供校驗和。

我想向用戶提供他們的客戶端工具也可能生成的哈希值,因此我一直在比較在線哈希工具。 我的問題是關於它們的散列形式,因為它們不同,奇怪的是。

經過快速搜索,我測試了5:

  1. http://www.convertstring.com/Hash/SHA256
  2. http://www.freeformatter.com/sha256-generator.html#ad-output
  3. http://online-encoder.com/sha256-encoder-decoder.html
  4. http://www.xorbin.com/tools/sha256-hash-calculator
  5. http://www.everpassword.com/sha-256-generator

輸入值'test'(后面沒有'enter')所有5給我相同的SHA256結果。 然而,這里開始有一個特殊的東西,當我輸入值'test [enter] test'(所以兩行)在線工具1,2和3給我相同的SHA256哈希,而站點4和5給我一個不同的(所以1,2和3相等,4和5相等)。 這很可能與工具或底層代碼處理\\ r \\ n的方式有關,或者至少我認為如此。

巧合的是,站點1,2和3為我提供了與我的C#代碼相同的哈希:

    var sha256Now = ComputeHash(Encoding.UTF8.GetBytes("test\r\ntest"), new SHA256CryptoServiceProvider());

    private static string ComputeHash(byte[] inputBytes, HashAlgorithm algorithm)
    {
        var hashedBytes = algorithm.ComputeHash(inputBytes);
        return BitConverter.ToString(hashedBytes);
    }

問題是:哪些網站“正確”?

有沒有辦法知道散列是否符合標准?

UPDATE1:將編碼更改為UTF8。 這對正在創建的輸出哈希沒有影響。 謝謝@Hans。 (因為我的Encoding.Default可能是Encoding.UTF8)

更新2:也許我應該稍微擴展一下這個問題,因為它可能沒有得到解釋,對不起。 我想我要問的更多的是可用性問題,而不是技術問題; 我應該提供具有不同行結尾的所有哈希嗎? 或者我應該堅持一個? 如果他們有不同的計算哈希的方式,客戶可能會打電話給我的公司擔心他們的文件被改變了。 這通常如何解決?

所有這些網站都返回有效值。

站點4和5使用\\n作為換行符。


編輯

我看到你編輯了你的問題,在代碼示例中添加了Encoding.Default.GetBytes

這很有趣,因為你看到計算哈希之前有一些string to byte array conversion 換行( \\n\\r\\n )以及文本編碼都是解釋字符串以獲取不同字節值的兩種方法。

一旦你有與輸入相同的字節,所有哈希結果都是相同的。


編輯2:

如果您直接處理字節,那么只需用這些字節計算哈希值。 不要嘗試提供不同的哈希值; 哈希必須只返回一個值 如果您的客戶端具有與您的客戶端不同的哈希值,那么他們做錯了

話雖如此,我很確定它永遠不會發生,因為沒有任何方法可以誤解字節數組。

Microsoft在System.Web.Helpers名稱空間中有一個名為Crypto的類,它具有開箱即用的SHA256哈希值。

例:

var plainText = "Text";
var hashedText = System.Web.Helpers.Crypto.SHA256(plainText);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM