Golang md5 Write vs Sum - 为什么输出不同?
Golang md5 Write vs Sum - why different outputs?
谁能解释为什么这些方法会产生两个不同的输出值?从 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)))
}
Sum 函数的参数不是输入,而是存储输出的位置。从技术上讲,无需分配即可将 Sum 转换为固定字节数组。您必须使用 Write
为哈希函数提供输入。
或直接使用md5.Sum()
:
func GetMD5HashWithSum(text string) string {
hash := md5.Sum([]byte(text))
return hex.EncodeToString(hash[:])
}
我混淆了 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))
}
谁能解释为什么这些方法会产生两个不同的输出值?从 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)))
}
Sum 函数的参数不是输入,而是存储输出的位置。从技术上讲,无需分配即可将 Sum 转换为固定字节数组。您必须使用 Write
为哈希函数提供输入。
或直接使用md5.Sum()
:
func GetMD5HashWithSum(text string) string {
hash := md5.Sum([]byte(text))
return hex.EncodeToString(hash[:])
}
我混淆了 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))
}