golang中的消息认证
生活随笔
收集整理的這篇文章主要介紹了
golang中的消息认证
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
消息認(rèn)證碼
go消息認(rèn)證碼的使用
有一個(gè)包: crypto/hmac
> func New(h func() hash.Hash, key []byte) hash.Hash > - 返回值: hash接口 > - 參數(shù)1: 函數(shù)函數(shù)的函數(shù)名 > sha1.new > md5.new > sha256.new > - 參數(shù)2: 秘鑰 > > 第二步: 添加數(shù)據(jù) > type Hash interface { > // 通過(guò)嵌入的匿名io.Writer接口的Write方法向hash中添加更多數(shù)據(jù),永遠(yuǎn)不返回錯(cuò)誤 > io.Writer > // 返回添加b到當(dāng)前的hash值后的新切片,不會(huì)改變底層的hash狀態(tài) > Sum(b []byte) []byte > // 重設(shè)hash為無(wú)數(shù)據(jù)輸入的狀態(tài) > Reset() > // 返回Sum會(huì)返回的切片的長(zhǎng)度 > Size() int > // 返回hash底層的塊大小;Write方法可以接受任何大小的數(shù)據(jù), > // 但提供的數(shù)據(jù)是塊大小的倍數(shù)時(shí)效率更高 > BlockSize() int > } > type Writer interface { > Write(p []byte) (n int, err error) > } > 第三步: 計(jì)算散列值使用步驟
- 在消息認(rèn)證碼生成的一方和校驗(yàn)的一方, 必須有一個(gè)秘鑰
- 雙方約定好使用同樣的哈希函數(shù)對(duì)數(shù)據(jù)進(jìn)行運(yùn)算
- 發(fā)送者:
- 發(fā)送原始法消息
- 將原始消息生成消息認(rèn)證碼
- ((原始消息) + 秘鑰) * 函數(shù)函數(shù) = 散列值(消息認(rèn)證碼)
- 將消息認(rèn)證碼發(fā)送給對(duì)方
- 接收者:
- 接收原始數(shù)據(jù)
- 接收消息認(rèn)證碼
- 校驗(yàn):
- ( 接收的消息 + 秘鑰 ) * 哈希函數(shù) = 新的散列值
- 通過(guò)新的散列值和接收的散列值進(jìn)行比較
消息認(rèn)證碼的問(wèn)題
- 有秘鑰分發(fā)困難的問(wèn)題
- 不能進(jìn)行第三方證明
- 不能防止否認(rèn)
總結(jié)
以上是生活随笔為你收集整理的golang中的消息认证的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: golang单向散列函数
- 下一篇: golang中的数字签名