密码学:三.消息认证码MAC
在信息的传输中我们不但要保证信息加密还要保证信息的:完整性,正式性,不可抵赖性。
消息摘要(MD)
消息摘要函数时一种用于判断数据完整性的算法,也称为散列函数或哈希函数,函数的返回值就散列值,散列值又称为消息摘要或者指纹。
常见算法:MD5 SHA
消息认证码(Message Authentication Code,简称MAC)
在消息摘要的基础上加了秘钥,消息验证码一般和对称加密配合使用。
- 发送方和接收方事先共享同一个密钥。
- 发送方将发送消息和密钥进行MAC运算,得到MAC值,并把MAC值与消息一同发送给接收方。
- 接收方接收到消息后,将消息部分与事先共享的密钥进行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 | 数字签名 |
---|---|---|---|
完整性 | 是 | 是 | 是 |
真实性 | 否 | 是 | 是 |
防抵赖 | 否 | 否 | 是 |
数字签名一般和非对称加密配合使用,后续归纳总结。 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现