日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

golang中的消息认证

發布時間:2025/6/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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) > } > 第三步: 計算散列值

使用步驟

  • 前提條件:
    • 在消息認證碼生成的一方和校驗的一方, 必須有一個秘鑰
    • 雙方約定好使用同樣的哈希函數對數據進行運算
  • 流程:
    • 發送者:
      • 發送原始法消息
      • 將原始消息生成消息認證碼
        • ((原始消息) + 秘鑰) * 函數函數 = 散列值(消息認證碼)
      • 將消息認證碼發送給對方
    • 接收者:
      • 接收原始數據
      • 接收消息認證碼
      • 校驗:
        • ( 接收的消息 + 秘鑰 ) * 哈希函數 = 新的散列值
        • 通過新的散列值和接收的散列值進行比較
  • // 生成消息認證碼 func GenerateHamc(plainText, key []byte)[]byte {// 1.創建哈希接口, 需要指定使用的哈希算法, 和秘鑰myhash := hmac.New(sha1.New, key)// 2. 給哈希對象添加數據myhash.Write(plainText)// 3. 計算散列值hashText := myhash.Sum(nil)return hashText }// 驗證消息認證碼 func VerifyHamc(plainText, key, hashText []byte) bool {// 1.創建哈希接口, 需要指定使用的哈希算法, 和秘鑰myhash := hmac.New(sha1.New, key)// 2. 給哈希對象添加數據myhash.Write(plainText)// 3. 計算散列值hamc1 := myhash.Sum(nil)// 4. 兩個散列值比較return hmac.Equal(hashText, hamc1) }func main () {src := []byte("在消息認證碼中,需要發送者和接收者之間共享密鑰,而這個密鑰不能被主動攻擊者Mallory獲取。" +"如果這個密鑰落入Mallory手中,則Mallory也可以計算出MAC值,從而就能夠自由地進行篡改和偽裝攻擊," +"這樣一來消息認證碼就無法發揮作用了。")key := []byte("helloworld")hamc1 := GenerateHamc(src, key)bl := VerifyHamc(src, key, hamc1)//fmt.Printf("校驗結果: %t\n", bl)fmt.Println(bl) }

    消息認證碼的問題

  • 弊端
    • 有秘鑰分發困難的問題
  • 無法解決的問題
    • 不能進行第三方證明
    • 不能防止否認
  • 總結

    以上是生活随笔為你收集整理的golang中的消息认证的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。