猿问

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

谁能解释为什么这些方法会产生两个不同的输出值?从 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


慕斯王
浏览 202回答 2
2回答

潇湘沐

我把 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

慕森王

Sum 函数的参数不是输入,而是存储输出的位置。技术上可以将 Sum 成一个固定的字节数组而无需分配。您必须使用Write向散列函数提供输入。或者md5.Sum()直接使用:func GetMD5HashWithSum(text string) string {    hash := md5.Sum([]byte(text))    return hex.EncodeToString(hash[:]) }
随时随地看视频慕课网APP

相关分类

Go
我要回答