<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] # 消息認證碼 ![](https://box.kancloud.cn/09ac625acdabe44c3cab78eb2a86586b_605x518.png) ## 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) > } > 第三步: 計算散列值 ~~~ ## 使用步驟 ![](https://box.kancloud.cn/5f500ca1ab2ff0febcf39590b803828c_772x474.png) > 1. 前提條件: > - 在消息認證碼生成的一方和校驗的一方, 必須有一個秘鑰 > - 雙方約定好使用同樣的哈希函數對數據進行運算 > 2. 流程: > - 發送者: > - 發送原始法消息 > - 將原始消息生成消息認證碼 > - ((原始消息) + 秘鑰) * 函數函數 = 散列值(消息認證碼) > - 將消息認證碼發送給對方 > - 接收者: > - 接收原始數據 > - 接收消息認證碼 > - 校驗: > - ( 接收的消息 + 秘鑰 ) * 哈希函數 = 新的散列值 > - 通過新的散列值和接收的散列值進行比較 ~~~ // 生成消息認證碼 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) } ~~~ ## 消息認證碼的問題 1. 弊端 - 有秘鑰分發困難的問題 2. 無法解決的問題 - 不能進行第三方證明 - 不能防止否認
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看