MD5 信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个 128 位(16字节)的散列值(hash value),用于确保信息传输完整一致。
本文将使用golang标准库中的crypto/md5
包实现字符串的MD5哈希计算;
导入必要包:
import (
"crypto/md5"
"encoding/hex"
)
crypto/md5
是标准库中的 md5 包;而encoding/hex
是一个将 byte 切片转换成字符串的编码工具包。
实现:
func MD5(v string)string{
d := []byte(v)
m := md5.New()
m.Write(d)
return hex.EncodeToString(m.Sum(nil))
}
md5.New()
返回一个hash.Hash
对象;hash.Hash
对象定义了一个Sum
接口,其原型为:
func Sum(data []byte) [Size]byte
Sum()
对hash.Hash
对象内部存储的内容进行校验计算,然后将其追加到data
的后面形成一个新的 byte 切片,所以一般需要将data
设为nil
。
hash.Hash
对象的Write
接口只接受 byte 切片数据类型;
完整代码如下:
package main
import (
"crypto/md5"
"encoding/hex"
"fmt"
)
func MD5(v string)string{
d := []byte(v)
m := md5.New()
m.Write(d)
return hex.EncodeToString(m.Sum(nil))
}
func main(){
fmt.Println(MD5("123456"))
}