中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解Go hash算法的支持

發布時間:2020-10-16 23:06:02 來源:腳本之家 閱讀:197 作者:benben_2015 欄目:編程語言

散列函數(散列算法,又稱哈希函數)是一種從任何一種數據中創建小的數字“指紋”的方法。散列函數把消息或數據壓縮成摘要,使得數據量變小,將數據的格式固定下來。該函數將數據打亂混合,重新創建一個叫做散列值的指紋。

隨機生成

加密密鑰需要盡可能的隨機,以便生成的密鑰很難再現。加密隨機數生成器必須生成無法通過計算方法推算出(低于p<.05的概率)的輸出。

散列函數

基本特性:如果兩個散列值是不相同的(根據同一函數),那么這兩個散列值的原始輸入也是不相同的。這個特性是散列函數具有確定性的結果,具有這種性質的散列函數稱為單向散列函數。但另一方面,散列函數的輸入和輸出不是唯一對應關系的,如果兩個散列值相同,兩個輸入值很可能是相同的,但也可能不同,這種情況稱為“散列碰撞”。

主要應用場景

  1. 文件校驗
  2. 數字簽名
  3. 鑒權協議

Go語言支持

go crypto標準包包含了一些常用的哈希算法,例如md5、sha1、sha256、sha512等。以sha1算法為例,了解下go如何生成哈希值。

package main

import (
  "crypto/sha1"
  "fmt"
  "io"
  "log"
  "os"
)

func main() {
  data := []byte("this is test, hello world, keep coding")
  fmt.Printf("%x \n", sha1.Sum(data))

  h := sha1.New()
  io.WriteString(h, "this is test, hello world, keep coding")
  fmt.Printf("%x \n", h.Sum(nil))

  fmt.Printf("%x \n", shaFile("./file.txt"))
}

//shaFile利用sha1算法將目標文件生成哈希值
func shaFile(filePath string) []byte {
  f, err := os.Open("file.txt")
  if err != nil {
    log.Fatal(err)
  }
  defer f.Close()

  h := sha1.New()
  if _, err := io.Copy(h, f); err != nil {
    log.Fatal(err)
  }
  return h.Sum(nil)
}

程序運行結果為:

a1 7b 4a 11 04 95 e1 c4 70 8f a0 33 db 89 d6 f6 13 3d 6a 48
a1 7b 4a 11 04 95 e1 c4 70 8f a0 33 db 89 d6 f6 13 3d 6a 48
ccf59c07592fb103ff88062c924962b6f9839a9b

示例二:

go語言中提供了MD5、SHA-1等幾種哈希函數,下面這個例子是使用MD5和SHA-1值來對內容加密:

package main

import (
  "crypto/md5"
  "crypto/sha1"
  "fmt"
)

func main() {
  TestString := "Hi, pandaman!"

  Md5Inst := md5.New()
  Md5Inst.Write([]byte(TestString))
  Result := Md5Inst.Sum([]byte(""))
  fmt.Printf("%x\n\n", Result)

  Sha1Inst := sha1.New()
  Sha1Inst.Write([]byte(TestString))
  Result = Sha1Inst.Sum([]byte(""))
  fmt.Printf("%x\n\n", Result)
}

輸出結果為:

詳解Go hash算法的支持

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

固安县| 北流市| 昭平县| 留坝县| 河津市| 庆安县| 兰西县| 会昌县| 神农架林区| 湟中县| 于田县| 招远市| 克东县| 宜宾市| 鄂托克前旗| 酒泉市| 德兴市| 盈江县| 杭锦旗| 台山市| 沽源县| 泗洪县| 福贡县| 岫岩| 北票市| 金乡县| 康定县| SHOW| 西畴县| 汨罗市| 兰考县| 肥东县| 穆棱市| 千阳县| 施秉县| 富顺县| 兴化市| 临洮县| 金乡县| 巴林左旗| 长寿区|