【问题标题】:How to get hex-encoded md5 hash in Go如何在 Go 中获取十六进制编码的 md5 哈希
【发布时间】:2011-11-02 23:23:41
【问题描述】:

我正在尝试在 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

但是当我尝试获取哈希的“总和”(http://golang.org/pkg/hash/)的字符串时,通过

sumstring := string(sum);  // returns 'Ӿ��]앿��N��' or similar

当哈希应该是d3be9e835dec95bfbef34ebe1fbf03da。当我尝试逐字节转换时,我得到了同样的废话,只是字符不同。

我是如何获取哈希的字符串的?

【问题讨论】:

  • 你想要一个 base-16 的哈希表示,
  • 请记住:哈希函数的输出是二进制值。您习惯看到的十六进制表示只是一种约定。

标签: hash md5 go


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    或者,您可以使用fmt.Sprintf("%x", sum)轻松获得字符串或字节切片的十六进制表示

    【讨论】:

    • IMO 这应该是首选的解决方案。
    猜你喜欢
    • 2011-02-19
    • 2011-10-25
    • 2018-02-22
    • 2014-07-24
    • 1970-01-01
    • 2020-05-27
    • 2015-03-24
    • 2011-03-02
    • 1970-01-01
    相关资源
    最近更新 更多