密码技术--消息认证码及go语言应用
生活随笔
收集整理的這篇文章主要介紹了
密码技术--消息认证码及go语言应用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.什么是消息認(rèn)證碼
消息認(rèn)證碼(message authorization code)是一種確認(rèn)完整性并進(jìn)行認(rèn)證的技術(shù),取了三個單詞的首字母,簡稱為MAC
發(fā)送者:((原始數(shù)據(jù)) + 秘鑰) * 哈希函數(shù) = 散列值(消息認(rèn)證碼)
- 發(fā)送原始數(shù)據(jù)和消息認(rèn)證碼
接收者:
- 接收消息認(rèn)證碼和原始數(shù)據(jù)
(接收原始數(shù)據(jù) + 秘鑰) * 哈希函數(shù) = 新的散列值 =? 接收到的散列值(消息認(rèn)證碼)
秘鑰必須一樣,使用的哈希函數(shù)必須一致
2.go中使用消息認(rèn)證碼
package mainimport ("crypto/hmac""crypto/sha256" )func GenerateHamc(plainText, key []byte) []byte {//1.初始化一個哈希接口,指定使用的哈希算法和秘鑰hMAC := hmac.New(sha256.New, key)//2.添加數(shù)據(jù)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.添加原始數(shù)據(jù)hMAC.Write(plainText)//3.計算散列值hMacNew := hMAC.Sum(nil)//4.比較消息認(rèn)證碼res := hmac.Equal(hMacNew, hMACOld)return res }func main() {src := []byte("消息認(rèn)證碼(message authorization code)是一種確認(rèn)完整性并進(jìn)行認(rèn)證的技術(shù),取了三個單詞的首字母,簡稱為MAC")key := []byte("12345678")hMacOld := GenerateHamc(src, key)res := VerityHmac(src, key, hMacOld)fmt.Printf("消息認(rèn)證結(jié)果:%t\n", res) }3.消息認(rèn)證碼存在的問題
弊端:
- 共享秘鑰分發(fā)困難問題(可以用非對稱解決)
無法解決的問題
- 無法通過第三方證明
- 不能防止否認(rèn)
總結(jié)
以上是生活随笔為你收集整理的密码技术--消息认证码及go语言应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 密码技术--非对称加密算法及Go语言应用
- 下一篇: 密码技术--RSA数字签名及Go语言应用