我面临着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
}
我在几个在线转换器上验证了结果,它们都给出了与我相同的结果。
答案 0 :(得分:3)
您假设您测试的在线转换器执行十六进制解码。他们没有;他们只需要使用ASCII / UTF-8 /字符串的任何值并使用它,即它们对文本进行散列。
输入c342...
字符串然后输入hello
可以很容易地观察到这种情况。两者都有效,而hello
显然不包含十六进制。另一种方法是以大写C
而不是c
开头,这也将返回不同的结果,而十六进制解码应返回相同的字节数组,从而散列。
小型Java应用程序确实证实了您的价值:
8a3ccc097f854811f4c49346da9c3bd1745d087ed539fa7817960f3e0ed8a44f
请注意,大多数(如果不是全部)在线工具基本上都是业余密码学家的业余爱好项目。期望实现中的所有类型的编码/解码问题,错误和不确定性。如果您想测试您的实现,请使用官方的NIST测试向量。