我正在考虑使用 Go 的加密包,我有一个简单的例子,我想弄清楚。我知道我可以使用io.WriteString散列,但我想在将它与另一个库连接之前直接了解散列对象。package mainimport ( "crypto/md5" "fmt")func main() { val := []byte("Hello World") h := md5.New() h.Write(val) fmt.Printf("%x\n", h.Sum(nil)) fmt.Println() h2 := md5.New() fmt.Printf("%x\n", h2.Sum(val))}运行它会产生以下输出:b10a8db164e0754105b7a99be72e3fe548656c6c6f20576f726c64d41d8cd98f00b204e9800998ecf8427e在伪代码中,我希望:h.Write(part1)h.Write(part2)result := h.Sum(part3)会产生相同的结果result := h.Sum(part1 + part2 + part3)但在我上面的简单示例中,我什至无法让单个部件在两种情况下产生相同的输出。在 md5 的 GoLang pkg 站点列表中Write神秘失踪,这让我相信我可能使用错误。我特别困惑的是,如果我只使用该方法,我会得到比平常更长的哈希值。Sum这里发生了什么?编辑:我决定打印十六进制 forval并注意到它与h2.Sum(val)输出的开头完全匹配。比较:val: 48656c6c6f20576f726c64 h2: 48656c6c6f20576f726c64d41d8cd98f00b204e9800998ecf8427e我肯定做错了什么。我应该Write完全避免使用该功能并坚持使用io吗?
- 1 回答
- 0 关注
- 313 浏览
添加回答
举报
0/150
提交
取消