濮阳杆衣贸易有限公司

主頁 > 知識庫 > 詳解Go hash算法的支持

詳解Go hash算法的支持

熱門標簽:鄭州亮點科技用的什么外呼系統(tǒng) 汕頭小型外呼系統(tǒng) 浙江高頻外呼系統(tǒng)多少錢一個月 釘釘有地圖標注功能嗎 黃岡人工智能電銷機器人哪個好 建造者2地圖標注 阿里云ai電話機器人 惠州電銷防封電話卡 濱州自動電銷機器人排名

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

隨機生成

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

散列函數(shù)

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

主要應(yīng)用場景

  1. 文件校驗
  2. 數(shù)字簽名
  3. 鑒權(quán)協(xié)議

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

程序運行結(jié)果為:

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等幾種哈希函數(shù),下面這個例子是使用MD5和SHA-1值來對內(nèi)容加密:

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

輸出結(jié)果為:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Go語言中三種不同md5計算方式的性能比較
  • Go語言對字符串進行MD5加密的方法
  • Go語言MD5加密用法實例
  • Golang的md5 hash計算操作

標簽:晉中 駐馬店 泰安 東營 滄州 阿壩 瀘州 昭通

巨人網(wǎng)絡(luò)通訊聲明:本文標題《詳解Go hash算法的支持》,本文關(guān)鍵詞  詳解,hash,算法,的,支持,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解Go hash算法的支持》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解Go hash算法的支持的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    丽水市| 漳州市| 肃宁县| 东兰县| 固阳县| 扎囊县| 阿拉善左旗| 黑龙江省| 沂水县| 颍上县| 漳浦县| 兴海县| 洱源县| 措勤县| 惠州市| 宁津县| 紫云| 杭州市| 连州市| 井冈山市| 白朗县| 明溪县| 自贡市| 太原市| 桃源县| 长白| 文安县| 临泉县| 潜山县| 西充县| 黄梅县| 敦煌市| 海兴县| 昔阳县| 朝阳区| 桃园县| 恩平市| 黄大仙区| 梁河县| 元氏县| 虹口区|