Golang的加密库都放在crypto目录下,其中MD5库在crypto/md5包中,该包主要提供了New和Sum函数
直接调用md5计算
package main
import (
"crypto/md5"
"fmt"
)
func main() {
data := []byte("crypted data")
fmt.Printf("%x", md5.Sum(data))
}
------------------------------------
121d0611200c43f67b722446a4faea45
另一种是调用md5.New()生成一个hash对象,然后往这个对象写将要加密的数据就行了
package main
import (
"crypto/md5"
"fmt"
"io"
)
func main() {
h := md5.New()
io.WriteString(h, "crypted data")
fmt.Printf("%x", h.Sum(nil))
}
------------------------------------------
121d0611200c43f67b722446a4faea45
或者调用write方法写
package main
import (
"crypto/md5"
"fmt"
)
func main() {
h := md5.New()
h.Write([]byte("crypted data"))
fmt.Printf("%x", h.Sum(nil))
}
-----------------------------------
121d0611200c43f67b722446a4faea45
Sum 函数是对hash.Hash对象内部存储的内容进行校验和 计算然后将其追加到data的后面形成一个新的byte切片。因此通常的使用方法就是将data置为nil。
该方法返回一个Size大小的byte数组,对于MD5来说就是一个128bit的16字节byte数组。
示例:文件的 md5 和 字符串的 md5
package main
import (
"crypto/md5"
"encoding/hex"
"fmt"
"io"
"os"
)
func GetFileMd5(filename string) (string, error) {
file, err := os.Open(filename)
if err != nil {
fmt.Println("os Open error")
return "", err
}
md5 := md5.New()
_, err = io.Copy(md5, file)
if err != nil {
fmt.Println("io copy error")
return "", err
}
md5Str := hex.EncodeToString(md5.Sum(nil))
return md5Str, nil
}
func GetStringMd5(s string) string {
md5 := md5.New()
md5.Write([]byte(s))
md5Str := hex.EncodeToString(md5.Sum(nil))
return md5Str
}
func main() {
file := "test.txt"
s := "hello world"
Val1, _ := GetFileMd5(file)
Val2 := GetStringMd5(s)
fmt.Println("Val1: %s, Val2: %s", Val1, Val2)
}