MD5在C#和golang之间不一致

时间:2014-03-31 15:06:19

标签: c# cryptography go md5

我正在尝试从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#行为。

如果你想检查我的整个实现,我可以为goc#提供一些小提琴。

2 个答案:

答案 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})

查看hash.Hash interface