Go lang SHA3-256给出无效输出?

时间:2017-09-16 15:30:44

标签: go cryptography

我面临着go SHA3-256功能的奇怪结果: 这是source code

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
}

我在几个在线转换器上验证了结果,它们都给出了与我相同的结果。

1 个答案:

答案 0 :(得分:3)

您假设您测试的在线转换器执行十六进制解码。他们没有;他们只需要使用ASCII / UTF-8 /字符串的任何值并使用它,即它们对文本进行散列。

输入c342...字符串然后输入hello可以很容易地观察到这种情况。两者都有效,而hello显然不包含十六进制。另一种方法是以大写C而不是c开头,这也将返回不同的结果,而十六进制解码应返回相同的字节数组,从而散列。

小型Java应用程序确实证实了您的价值:

8a3ccc097f854811f4c49346da9c3bd1745d087ed539fa7817960f3e0ed8a44f

请注意,大多数(如果不是全部)在线工具基本上都是业余密码学家的业余爱好项目。期望实现中的所有类型的编码/解码问题,错误和不确定性。如果您想测试您的实现,请使用官方的NIST测试向量。