我正在尝试从C#移植算法。我需要的一步是取一个字节数组的md5。我似乎无法在C#和go实现之间获得一致的哈希值。
在C#中,我可以:new MD5CryptoServiceProvider().ComputeHash(new byte[] { 5 }))
我得到[139 182 193 120 56 100 63 150 145 204 106 77 230 197 23 9]
go:md5.New().Sum([]byte{5})
收益率:[5 212 29 140 217 143 0 178 4 233 128 9 152 236 248 66 126]
我做了些什么,或者实施方式实际上是不同的。我需要能够在复制方面复制C#行为。
答案 0 :(得分:4)
您正在滥用Sum函数的输入。 sum的输入参数用于存储输出,而不是作为hash的输入。直接使用md5.Sum
(其行为符合您的要求)或写入返回的Hash对象,如示例中所示:http://golang.org/pkg/crypto/md5/#example_New
答案 1 :(得分:2)
应该是
fmt.Println(md5.Sum([]byte{5}))
关于你对Evan的评论中的第二个问题:
hash.Hash
实现了io.Writer
。所以你总是这样做:
h := md5.New()
h.Write([]byte{5})