密码学:三.消息认证码MAC

在信息的传输中我们不但要保证信息加密还要保证信息的:完整性,正式性,不可抵赖性。

消息摘要(MD)

消息摘要函数时一种用于判断数据完整性的算法,也称为散列函数或哈希函数,函数的返回值就散列值,散列值又称为消息摘要或者指纹。
常见算法:MD5 SHA

消息认证码(Message Authentication Code,简称MAC)

在消息摘要的基础上加了秘钥,消息验证码一般和对称加密配合使用。

  1. 发送方和接收方事先共享同一个密钥。
  2. 发送方将发送消息和密钥进行MAC运算,得到MAC值,并把MAC值与消息一同发送给接收方。
  3. 接收方接收到消息后,将消息部分与事先共享的密钥进行MAC运算,得到MAC值,将MAC值与发送方发送的MAC值进行比较,如果一致,证明消息的真实性和完整性

代码实践

golang

func getSign(data map[string]string, key string) string {
	keys := make([]string, 0)
	for k, _ := range data {
		keys = append(keys, k)
	}
	sort.Strings(keys)
	for _,v := range keys{
		key += v + data[v]
	}

	h := md5.New()
	h.Write([]byte(key))
	return hex.EncodeToString(h.Sum(nil))
}

接收方虽然可以确定消息的完整性和真实性,解决篡改和伪造消息的问题,但不能防止A否认发送过消息。A给B发送了消息,B接收到之后,A否认自己发送过消息给B,并抵赖说,“虽然我和B都能计算处正确的MAC值,但是可能是B的密钥被攻击者盗取了,攻击者给B发的消息。”

MD(消息摘要)、MAC(消息认证码)、数字签名的区别:

目标\方法 MD MAC 数字签名
完整性
真实性
防抵赖
数字签名一般和非对称加密配合使用,后续归纳总结。
posted @   EthanWell  阅读(646)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示