2017-09-16 68 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