Go语言使用单向散列函数和秘钥生成认证码对消息进行验证
2019-11-24 本文已影响0人
realguan
package main
import (
"crypto/hmac"
"crypto/sha1"
"fmt"
)
func main() {
src := []byte("love you three thousand times") // 明文
key := []byte("just a joke") // 秘钥
// 生成散列值(消息认证码)
hamc1 := GenerateHamc(src,key)
// 验证消息认证码
res := VerifyHamc(src,key,hamc1)
fmt.Println(res)
}
// 生成消息认证码
func GenerateHamc(plainText,key []byte) []byte {
// 1 创建hash接口对象,需要指定使用的hash算法和秘钥
myhash := hmac.New(sha1.New,key)
// 2 给hash接口添加数据
myhash.Write(plainText)
// 3 计算出散列值
hashText := myhash.Sum(nil)
return hashText
}
// 验证消息认证码
func VerifyHamc(plainText,key,hashText []byte) bool {
// 1 创建hash接口对象,指定hash算法和秘钥
myhash := hmac.New(sha1.New,key)
// 2 给hash接口对象添加数据
myhash.Write(plainText)
// 3 计算散列值
hamc2 := myhash.Sum(nil)
// 4 两个散列值比较
return hmac.Equal(hashText,hamc2)
}