go 计算 MD5
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) }
参考: https://www.jianshu.com/p/58dcbf490ef3