谁能解释为什么这些方法会产生两个不同的输出值?从 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
慕森王
TA贡献1777条经验 获得超3个赞
Sum 函数的参数不是输入,而是存储输出的位置。技术上可以将 Sum 成一个固定的字节数组而无需分配。您必须使用Write向散列函数提供输入。
或者md5.Sum()直接使用:
func GetMD5HashWithSum(text string) string {
hash := md5.Sum([]byte(text))
return hex.EncodeToString(hash[:])
}
- 2 回答
- 0 关注
- 201 浏览
添加回答
举报
0/150
提交
取消