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