密码技术--消息认证码及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语言应用的主要内容,如果未能解决你的问题,请参考以下文章

密码技术--单向散列函数即Go语言应用

密码技术--RSA数字签名及Go语言应用

密码技术--证书及go语言生成自签证书

Go-哈希函数与消息认证详解(含代码)

密码技术--国密SM4分组密码算法及Go语言应用

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段