Go语言使用单向散列函数和秘钥生成认证码对消息进行验证

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)
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容