2017-09-16 63 views
-2

我面對奇怪的結果FO go SHA3-256功能: 這裏是source codeGo lang SHA3-256給出無效輸出?

import (
    "golang.org/x/crypto/sha3" 
    "encoding/hex" 
) 

func main() { 
    pub, _ := hex.DecodeString("c342dbf7cdd3096c4c3910c511a57049e62847dd5030c7e644bc855acc1fd626") 
    h := sha3.Sum256(pub[:]) 
    fmt.Printf("SHA3 %x\n", h) 
    // expected: b32562e67d3ea44ba1367ce134caac49fd305b24cde6716ad3857ac682576379 
    // received: 8a3ccc097f854811f4c49346da9c3bd1745d087ed539fa7817960f3e0ed8a44f 
} 

我覈實夫婦在線轉換器的結果,他們都給予同樣的結果,與我的不同。

+0

您有問題要問?另外,請讓你的問題自成一體。 –

+0

打印'sha3.Sum256([] byte(「c342dbf7cdd3096c4c3910c511a57049e62847dd 5030c7e644bc855acc1f d626」))''的結果並看到相同的「錯誤」結果 – JimB

回答

3

您假設您已測試的在線轉換器執行十六進制解碼。他們沒有;他們只需要ASCII/UTF-8 /字符串的任何值並使用它們,即他們散列文本。

這可以通過輸入您的c342...字符串然後輸入hello很容易觀察到。兩者都可以工作,而hello顯然不包含十六進制。另一種方法是以大寫字母C而不是c開頭,這將返回不同的結果,而十六進制解碼應該返回相同的字節數組,因此散列。

和一個小的Java應用程序確實確認您的值:

8a3ccc097f854811f4c49346da9c3bd1745d087ed539fa7817960f3e0ed8a44f 

需要注意的是大多數,如果不是所有的在線工具基本上都是由業餘愛好解密碼的項目。預計實現中的所有類型的編碼/解碼問題,錯誤和不確定性。如果你想測試你的實現,使用官方的NIST測試向量。

+0

感謝@Maarten Bodewes,總是錯過了那些帶有字符串的東西。 – Constantine