golang標準庫crc32的使用樣例
1.概述
crc32實現(xiàn)了32位循環(huán)冗余檢測算法的實現(xiàn)。目前crc32內(nèi)部提供 了三種常用的多項式,采用查表法來提高計算checksum的效率。通過crc32.MakeTable()可以獲取對應的表,crc32提供了一個IEETABLE可以直接使用,官方鏈接如下:crc32 package - hash/crc32 - Go Packages
圖1 多項式對應常量
2.API簡介
表1 crc32對外暴露函數(shù)
函數(shù)名稱 | 參數(shù) | 返回值 | 簡介 |
Checksum | data:[]byte tab:*crc.Table | checksum:uint32 | 輸入計算校驗和的原始數(shù)據(jù)和校驗方式,獲取校驗和。 |
ChecksumIEEE | data:[]byte | checksum:uint32 | 輸入計算校驗和的原始數(shù)據(jù),使用IEEE多項式獲取校驗和。 |
New | tab:*crc.Table | hash.Hash32 | 獲取特定校驗方式的hash,后續(xù)調(diào)用Sum即可獲取校驗和 |
NewIEEE | 無 | hash.Hash32 | 獲取IEEE方式的hash,后續(xù)調(diào)用Sum即可獲取校驗和 |
Update | crc:uint32 tab:*crc.Table p:[]byte | checksum:uint32 | 適用于流式數(shù)據(jù),繼續(xù)追加數(shù)據(jù)計算校驗和 |
官方對外暴漏了5個函數(shù),hash和Update這兩種方式支持追加數(shù)據(jù)。
3.使用樣例
package main import ( "fmt" "hash/crc32" ) func main() { originalData := []byte("hello world") i3eCheckSum1 := crc32.Checksum(originalData, crc32.IEEETable) i3eCheckSum2 := crc32.ChecksumIEEE(originalData) fmt.Println(i3eCheckSum1, i3eCheckSum2) //MakeTable使用方式 caTable := crc32.MakeTable(crc32.Castagnoli) kmTable := crc32.MakeTable(crc32.Koopman) caCheckSum := crc32.Checksum(originalData, caTable) kmCheckSum := crc32.Checksum(originalData, kmTable) fmt.Println("castagnoli checksum is: ", caCheckSum) fmt.Println("koopman checksum is: ", kmCheckSum) caHash := crc32.New(caTable) _, err := caHash.Write(originalData) if err != nil { panic(err) } caCheckSum1 := caHash.Sum32() fmt.Println("castagnoli checksum is: ", caCheckSum1) i3eHash := crc32.NewIEEE() //此處可以一直追加數(shù)據(jù) _, err = i3eHash.Write(originalData) if err != nil { panic(err) } i3eCheckSum3 := i3eHash.Sum32() fmt.Println("ieee checksum is: ", i3eCheckSum3) newData := []byte("你好,世界") //采用update追加數(shù)據(jù)(適用于計算之后再追加數(shù)據(jù)的場景) newCheckSum1 := crc32.Update(i3eCheckSum1, crc32.IEEETable, newData) //直接追加數(shù)據(jù)之后再計算 newCheckSum2 := crc32.ChecksumIEEE(append(originalData, newData...)) fmt.Println(newCheckSum1, newCheckSum2) }
總結
到此這篇關于golang標準庫crc32使用的文章就介紹到這了,更多相關golang標準庫crc32使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
關于golang利用channel和goroutine完成統(tǒng)計素數(shù)的思路
這篇文章主要介紹了golang利用channel和goroutine完成統(tǒng)計素數(shù)的思路詳解,通過思路圖分析及實例代碼相結合給大家介紹的非常詳細,需要的朋友可以參考下2021-08-08