佳木斯湛栽影视文化发展公司

主頁 > 知識(shí)庫 > 詳解Go hash算法的支持

詳解Go hash算法的支持

熱門標(biāo)簽:呼叫中心市場(chǎng)需求 網(wǎng)站排名優(yōu)化 AI電銷 服務(wù)外包 鐵路電話系統(tǒng) Linux服務(wù)器 地方門戶網(wǎng)站 百度競(jìng)價(jià)排名

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

隨機(jī)生成

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

散列函數(shù)

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

主要應(yīng)用場(chǎng)景

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

Go語言支持

go crypto標(biāo)準(zhǔn)包包含了一些常用的哈希算法,例如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算法將目標(biāo)文件生成哈希值
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)
}

程序運(yùn)行結(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ù),下面這個(gè)例子是使用MD5和SHA-1值來對(duì)內(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)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

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

標(biāo)簽:崇左 蘭州 銅川 黃山 湘潭 仙桃 湖南 衡水

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解Go hash算法的支持》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    曲麻莱县| 分宜县| 嘉黎县| 绥化市| 巩留县| 莱芜市| 聂荣县| 清河县| 怀远县| 永顺县| 海阳市| 视频| 武定县| 平泉县| 太和县| 宣城市| 龙里县| 县级市| 新竹县| 连山| 江油市| 余干县| 东至县| 阿拉善左旗| 西安市| 武陟县| 体育| 晋江市| 奈曼旗| 高陵县| 长汀县| 赤水市| 博野县| 肥东县| 竹北市| 泾源县| 邹城市| 汪清县| 霍州市| 鸡泽县| 南涧|