<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # 哈希算法 ## 概念 稱謂: 單向散列函數, 哈希函數, 雜湊函數, 消息摘要函數 接收的輸入: 原像 輸出: 散列值, 哈希值, 指紋, 摘要 ## 單向散列函數特性 1. 將任意長度的數據轉換成固定長度的數據 2. 很強的抗碰撞性 3. 不可逆 1. MD4/MD5 - 不安全 - 散列值長度: 128bit == 16byte 2. sha1 - 不安全 - 散列值長度: 160bit == 20byte 3. sha2 - 安全 - sha224 - 散列值長度: 224bit == 28byte - sha256 - 散列值長度: 256== 32byte - sha384 - 散列值長度: 384bit == 48byte - sha512 - 散列值長度: 512bit == 64byte ## go中使用單向散列函數 ~~~ // 第一種方式, 直接調用sum // 適用于數據量比較小的情況 func Sum(data []byte) [Size]byte // 第二種方式 // 1. 創建哈希接口對象 func New() hash.Hash 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) } // 2. 往創建出的哈希對象中添加數據 hash.Hash.Write([]byte("添加的數據...")) hash.Hash.Write([]byte("添加的數據...")) hash.Hash.Write([]byte("添加的數據...")) hash.Hash.Write([]byte("添加的數據...")) // 3. 計算結果, md5就是散列值 md5 := hash.Sum(nil); // 散列值一般是一個二進制的字符串, 有些字符不可見, 需要格式化 // 格式化為16進制的數字串 - 0-9, a-f func EncodeToString(src []byte) string // 數據轉換完成之后, 長度是原來的2倍 ~~~ # sha256 ~~~ //驗證 myHash() // 使用sha256 func myHash() { // sha256.Sum256([]byte("hello, go")) // 1. 創建哈希接口對象 myHash := sha256.New() // 2. 添加數據 src := []byte("123 123...") myHash.Write(src) myHash.Write(src) myHash.Write(src) // 3. 計算結果 res := myHash.Sum(nil) // 4. 格式化為16進制形式 myStr := hex.EncodeToString(res) fmt.Printf("%s\n", myStr) } ~~~
                  <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>

                              哎呀哎呀视频在线观看