有人可以解释为什么这些方法会产生两种不同的输出值吗?从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)))
}
答案 0 :(得分:4)
Sum函数的参数不是输入,而是存储输出的位置。技术上可以在不需要分配的情况下将Sum求入固定的字节数组。您必须使用Write
为哈希函数提供输入。
或直接使用md5.Sum()
:
func GetMD5HashWithSum(text string) string {
hash := md5.Sum([]byte(text))
return hex.EncodeToString(hash[:])
}
答案 1 :(得分:4)
我正在使用md5.Sum()混合hasher.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))
}