密码技术--消息认证码及Go语言应用
Posted Yuan_sr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了密码技术--消息认证码及Go语言应用相关的知识,希望对你有一定的参考价值。
1.什么是消息认证码
消息认证码(message authorization code)是一种确认完整性并进行认证的技术,取了三个单词的首字母,简称为MAC
发送者:((原始数据) + 秘钥) * 哈希函数 = 散列值(消息认证码)
- 发送原始数据和消息认证码
接收者:
- 接收消息认证码和原始数据
(接收原始数据 + 秘钥) * 哈希函数 = 新的散列值 =? 接收到的散列值(消息认证码)
秘钥必须一样,使用的哈希函数必须一致
#### 2.go中使用消息认证码
package main
import (
"crypto/hmac"
"crypto/sha256"
)
func GenerateHamc(plainText, key []byte) []byte {
//1.初始化一个哈希接口,指定使用的哈希算法和秘钥
hMAC := hmac.New(sha256.New, key)
//2.添加数据
hMAC.Write(plainText)
//3.计算
sum := hMAC.Sum(nil)
return sum
}
func VerityHmac(plainText, key, hMACOld []byte) bool {
//1.初始化一个哈希接口,指定使用的哈希算法和秘钥
hMAC := hmac.New(sha256.New, key)
//2.添加原始数据
hMAC.Write(plainText)
//3.计算散列值
hMacNew := hMAC.Sum(nil)
//4.比较消息认证码
res := hmac.Equal(hMacNew, hMACOld)
return res
}
func main() {
src := []byte("消息认证码(message authorization code)是一种确认完整性并进行认证的技术,取了三个单词的首字母,简称为MAC")
key := []byte("12345678")
hMacOld := GenerateHamc(src, key)
res := VerityHmac(src, key, hMacOld)
fmt.Printf("消息认证结果:%t\\n", res)
}
3.消息认证码存在的问题
弊端:
- 共享秘钥分发困难问题(可以用非对称解决)
无法解决的问题
- 无法通过第三方证明
- 不能防止否认
以上是关于密码技术--消息认证码及Go语言应用的主要内容,如果未能解决你的问题,请参考以下文章
Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段