婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 淺析Go 字符串指紋

淺析Go 字符串指紋

熱門標簽:烏魯木齊人工電銷機器人系統 福州鐵通自動外呼系統 智能電銷機器人營銷 賺地圖標注的錢犯法嗎 地圖標注測試 濮陽自動外呼系統代理 廣東語音外呼系統供應商 長沙ai機器人電銷 澳門防封電銷卡

寫項目時,有時我們需要緩存, 緩存就會需要唯一的key. 常規是對字符串求md5指紋. 在golang里我們也可以使用, 目前可以計算一個字符串的crc32, md5, sha1的指紋.

md5 : 一種被廣泛使用的密碼散列函數,可以產bai生出一個128位(du16字節)的散列值(hash value),用于確保信息傳輸完整一zhi致。MD5由美國密碼學家羅納德·李維斯特(Ronald Linn Rivest)設計,于1992年公開,用以取代MD4算法。

sha1: SHA1是由NISTNSA設計為同DSA一起使用的,它對長度小于264的輸入,產生長度為160bit的散列值,因此抗窮舉(brute-force)性更好。SHA-1基于MD5,MD5又基于MD4。

crc32: 本身是“冗余校驗碼”的意思,CRC32則表示會產生一個32bit(8位十六進制數)的校驗值。由于CRC32產生校驗值時源數據塊的每一個bit(位)都參與了計算,所以數據塊中即使只有一位發生了變化,也會得到不同的CRC32值。

golang 實現

md5

// md5值
func Md5Str(s string) string {
	hash := md5.Sum([]byte(s))
	return hex.EncodeToString(hash[:])
}

sha1

// 散列值
func Sha1Str(s string) string {
	r := sha1.Sum([]byte(s))
	return hex.EncodeToString(r[:])
}

crc32

// String hashes a string to a unique hashcode.
// https://github.com/hashicorp/terraform/blob/master/helper/hashcode/hashcode.go
// crc32 returns a uint32, but for our use we need
// and non negative integer. Here we cast to an integer
// and invert it if the result is negative.
func HashCode(s string) int {
	v := int(crc32.ChecksumIEEE([]byte(s)))
	if v >= 0 {
		return v
	}
	if -v >= 0 {
		return -v
	}
	// v == MinInt
	return 0
}

// Strings hashes a list of strings to a unique hashcode.
func HashCodes(strings []string) string {
	var buf bytes.Buffer

	for _, s := range strings {
		buf.WriteString(fmt.Sprintf("%s-", s))
	}

	return fmt.Sprintf("%d", HashCode(buf.String()))
}

使用

func main() {
	// 2713056744
	// 1f8689c0dd07ce42757ac01b1ea714f9
	// 9addcbc6fee9c06f43d7110b657f3c61ff707032
	txt := "https://github.com/hashicorp/terraform/blob/master/helper/hashcode/hashcode.go"
	fmt.Println(HashCode(txt))
	fmt.Println(Md5Str(txt))
	fmt.Println(Sha1Str(txt))
}

效率

得出效率: hash_code > md5 > sha1

const (
	Txt = "https://github.com/hashicorp/terraform/blob/master/helper/hashcode/hashcode.go"
)

// go test -test.bench=. -test.benchmem
func BenchmarkMd5Str(b *testing.B) {
	for i := 0; i  b.N; i++ {
		Md5Str(Txt)
	}
}
func BenchmarkHashCode(b *testing.B) {
	for i := 0; i  b.N; i++ {
		HashCode(Txt)
	}
}
func BenchmarkSha1Str(b *testing.B) {
	for i := 0; i  b.N; i++ {
		Sha1Str(Txt)
	}
}

// BenchmarkMd5Str-8    2148428        518 ns/op       144 B/op     3 allocs/op
// BenchmarkHashCode-8   8105571        160 ns/op       80 B/op     1 allocs/op
// BenchmarkSha1Str-8    1836854        700 ns/op       176 B/op     3 allocs/op

// 得出效率: hash_code > md5 > sha1

以上就是淺析Go 字符串指紋的詳細內容,更多關于Go 字符串指紋的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • Golang中的Unicode與字符串示例詳解
  • 讓Django的BooleanField支持字符串形式的輸入方式
  • go浮點數轉字符串保留小數點后N位的完美解決方法
  • Go 驗證字符串中是否包含中文(推薦)
  • Golang中生成隨機字符串并復制到粘貼板的方法
  • 分享6個Go處理字符串的技巧小結
  • Go 高效截取字符串的一些思考
  • Go 結構體、數組、字典和 json 字符串的相互轉換方法
  • 簡單談談Golang中的字符串與字節數組
  • Go語言中的字符串處理方法示例詳解
  • Golang字符串的拼接方法匯總
  • Golang 中整數轉字符串的方法

標簽:廣西 阿克蘇 調研邀請 慶陽 西雙版納 德州 貴陽 太原

巨人網絡通訊聲明:本文標題《淺析Go 字符串指紋》,本文關鍵詞  淺析,字符串,指紋,淺析,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《淺析Go 字符串指紋》相關的同類信息!
  • 本頁收集關于淺析Go 字符串指紋的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 岳西县| 高密市| 聂荣县| 通许县| 屯昌县| 西乡县| 庆安县| 台中市| 寿宁县| 南昌市| 通山县| 河津市| 揭东县| 浮山县| 双江| 崇明县| 萨嘎县| 尼玛县| 东山县| 洪洞县| 康乐县| 景东| 泰州市| 修水县| 梅州市| 蓬莱市| 德钦县| 慈利县| 图们市| 应用必备| 成安县| 临沧市| 法库县| 个旧市| 河源市| 古交市| 乌兰浩特市| 光泽县| 乐安县| 绥宁县| 临猗县|