为了账号安全,请及时绑定邮箱和手机立即绑定

Golang md5 Write vs Sum - 为什么输出不同?

Golang md5 Write vs Sum - 为什么输出不同?

Go
慕斯王 2021-11-22 15:25:45
谁能解释为什么这些方法会产生两个不同的输出值?从 md5 文档中不清楚。import (    "crypto/md5"    "encoding/hex"    "fmt")func GetMD5HashWithWrite(text string) string {    hasher := md5.New()    hasher.Write([]byte(text))    return hex.EncodeToString(hasher.Sum(nil))}func GetMD5HashWithSum(text string) string {    hasher := md5.New()    return hex.EncodeToString(hasher.Sum([]byte(text)))}参见示例:https : //play.golang.org/p/Fy7KgfCvXc
查看完整描述

2 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

我把 hasher.Sum() 和 md5.Sum() 混在一起了。这些确实产生了等效的输出。


func GetMD5HashWithWrite(text string) []byte {

    hasher := md5.New()

    hasher.Write([]byte(text))

    return hasher.Sum(nil)

}


func GetMD5HashWithSum(text string) [16]byte {

    return md5.Sum([]byte(text))

}

游乐场:https : //play.golang.org/p/fpE5ztnh5U


查看完整回答
反对 回复 2021-11-22
?
慕森王

TA贡献1777条经验 获得超3个赞

Sum 函数的参数不是输入,而是存储输出的位置。技术上可以将 Sum 成一个固定的字节数组而无需分配。您必须使用Write向散列函数提供输入。


或者md5.Sum()直接使用:


func GetMD5HashWithSum(text string) string {

    hash := md5.Sum([]byte(text))

    return hex.EncodeToString(hash[:]) 

}


查看完整回答
反对 回复 2021-11-22
  • 2 回答
  • 0 关注
  • 201 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信