Golang md5写与总和 - 为什么不同的输出?

时间:2015-11-10 22:58:38

标签: go md5

有人可以解释为什么这些方法会产生两种不同的输出值吗?从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 个答案:

答案 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))
}

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