Go语言中使用crypto/md5生成MD5哈希,md5.Sum()用于字符串,md5.New()配合io.Copy处理文件流,常用于数据完整性校验。

在Go语言中,可以使用标准库 crypto/md5 来生成MD5哈希值。虽然MD5不适用于安全敏感场景(如密码存储),但在校验数据完整性、生成唯一标识等场景中仍被广泛使用。
导入 crypto/md5 包
要使用MD5功能,需导入 crypto/md5 包:
import "crypto/md5"
对字符串生成MD5哈希
使用 md5.Sum() 函数可对字节数组计算MD5值,返回一个16字节的数组。通常将其转换为16进制字符串输出。
立即学习“go语言免费学习笔记(深入)”;
示例代码:
package main
import (
"crypto/md5"
"fmt"
)
func main() {
data := "hello world"
hash := md5.Sum([]byte(data))
fmt.Printf("MD5: %x\n", hash) // 输出:b10a8db164e0754105b7a99be72e3fe5
}
对文件生成MD5哈希
对于大文件,建议分块读取以避免内存溢出。使用 io.Copy 配合 md5.New() 创建哈希器。
示例代码:
package main
import (
"crypto/md5"
"fmt"
"io"
"os"
)
func getFileMD5(filename string) (string, error) {
file, err := os.Open(filename)
if err != nil {
return "", err
}
defer file.Close()
hash := md5.New()
if _, err := io.Copy(hash, file); err != nil {
return "", err
}
return fmt.Sprintf("%x", hash.Sum(nil)), nil
}
func main() {
md5sum, err := getFileMD5("example.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("File MD5:", md5sum)
}
常见用法说明
- %x 格式化输出会自动将字节转为小写16进制字符串
-
md5.Sum() 接受
[]byte并返回[16]byte -
md5.New() 返回实现
hash.Hash接口的对象,适合流式处理 - 若需Base64编码结果,可用
encoding/base64转换
基本上就这些。MD5在Go中使用简单,注意区分 Sum 和 New 的适用场景即可。










