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)
}
上一篇下一篇

猜你喜欢

热点阅读