Go 中签名运算非常简单,crypto
的子包可以完成所有功能。
MD5
引入包
字符串
有两种方式可以对字符串进行 md5 运算
1 2 3 4 5 6 7 8 9
| import ( "crypto/md5" "fmt" )
func MD51(message string) string { res := md5.Sum([]byte(message)) return fmt.Sprintf("%x", res) }
|
1 2 3 4 5 6 7 8 9 10 11
| import ( "crypto/md5" "io" "fmt" )
func MD52(message string) string { h := md5.New() io.WriteString(h, message) return fmt.Sprintf("%x", h.Sum(nil)) }
|
文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import ( "crypto/md5" "fmt" "io" "os" "log" )
func MD5File(filePath string) string { f, err := os.Open(filePath) if err != nil { log.Fatal(err) } defer f.Close()
h := md5.New() if _, err := io.Copy(h, f); err != nil { log.Fatal(err) }
return fmt.Sprintf("%x", h.Sum(nil)) }
|
会了一种计算方式其他的都是这个套路,比如 sha1 只需要引入 crypto/sha1
包,然后将 md5 替换为 sha1 即可
Hmac
Hmac 算法在另一个包中可以实现
引入包
HmacMD5算法
hmac 包需要借助 md5, sha1
等包一起实现相应算法
1 2 3 4 5 6 7 8 9 10 11
| import ( "crypto/md5" "crypto/hmac" "fmt" )
func HmacMD5(message string, key string) string { h := hmac.New(md5.New, []byte(key)) h.Write([]byte(message)) return fmt.Sprintf("%x", h.Sum(nil)) }
|