Hash 如何在Go中获取十六进制编码的md5哈希

Hash 如何在Go中获取十六进制编码的md5哈希,hash,md5,go,Hash,Md5,Go,我试图在Go中获取文件的md5哈希,如下所示: running_hash := md5.New(); // type hash.Hash running_hash.Write(data); // data is []byte sum := running_hash.Sum(); // []uint8 according to the compiler 但是当我尝试获取散列的‘sum’字符串()时,通过 当散列应该是D3BE9E835DEC95BFBEF34BEF03DA时。当我试图逐字节转换

我试图在Go中获取文件的md5哈希,如下所示:

running_hash := md5.New(); // type hash.Hash
running_hash.Write(data);  // data is []byte
sum := running_hash.Sum(); // []uint8 according to the compiler
但是当我尝试获取散列的‘sum’字符串()时,通过

当散列应该是D3BE9E835DEC95BFBEF34BEF03DA时。当我试图逐字节转换时,我得到了同样的废话,只是字符不同


如何获取散列的字符串?

基本上,您已经获得了二进制数据,但看起来您需要十六进制。请查看转换例程的包,尤其是。我不是Go程序员,但我认为如果你只需将
sum
传递到
hex.EncodeToString
,你就会得到你期望的答案。

或者,你可以使用
fmt.Sprintf(“%x”,sum”)轻松获得字符串或字节片的十六进制表示法。
你想要哈希的
base-16
表示法,请记住:哈希函数的输出是二进制值。您习惯看到的十六进制表示法只是一种约定。依我看,这应该是首选的解决方案。
sumstring := string(sum);  // returns 'Ӿ��]앿��N��' or similar