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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

golang单向散列函数

發布時間:2025/6/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 golang单向散列函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概念

稱謂: 單向散列函數, 哈希函數, 雜湊函數, 消息摘要函數

接收的輸入: 原像

輸出: 散列值, 哈希值, 指紋, 摘要

單向散列函數特性

  • 將任意長度的數據轉換成固定長度的數據

  • 很強的抗碰撞性

  • 不可逆

  • MD4/MD5

    • 不安全
    • 散列值長度: 128bit == 16byte
  • sha1

    • 不安全
    • 散列值長度: 160bit == 20byte
  • 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.Hashtype 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-ffunc 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) }

    總結

    以上是生活随笔為你收集整理的golang单向散列函数的全部內容,希望文章能夠幫你解決所遇到的問題。

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