golang标准库crc32的使用样例

 更新时间:2024年03月28日 10:24:18   作者:MCMAXMM  
根据实验我们知道crc32算法比md5算法快4倍左右,所以研究了下golang的crc32使用,这篇文章主要给大家介绍了关于golang标准库crc32使用的相关资料,需要的朋友可以参考下

1.概述

crc32实现了32位循环冗余检测算法的实现。目前crc32内部提供 了三种常用的多项式,采用查表法来提高计算checksum的效率。通过crc32.MakeTable()可以获取对应的表,crc32提供了一个IEETABLE可以直接使用,官方链接如下:crc32 package - hash/crc32 - Go Packages

 图1 多项式对应常量

2.API简介

表1 crc32对外暴露函数

函数名称参数返回值简介
Checksum

data:[]byte

tab:*crc.Table

checksum:uint32输入计算校验和的原始数据和校验方式,获取校验和。
ChecksumIEEEdata:[]bytechecksum:uint32输入计算校验和的原始数据,使用IEEE多项式获取校验和。
Newtab:*crc.Tablehash.Hash32获取特定校验方式的hash,后续调用Sum即可获取校验和
NewIEEEhash.Hash32获取IEEE方式的hash,后续调用Sum即可获取校验和
Update

crc:uint32

tab:*crc.Table

p:[]byte

checksum:uint32适用于流式数据,继续追加数据计算校验和

     官方对外暴漏了5个函数,hash和Update这两种方式支持追加数据。

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()
	//此处可以一直追加数据
	_, err = i3eHash.Write(originalData)
	if err != nil {
		panic(err)
	}
	i3eCheckSum3 := i3eHash.Sum32()
	fmt.Println("ieee checksum is: ", i3eCheckSum3)

	newData := []byte("你好,世界")
	//采用update追加数据(适用于计算之后再追加数据的场景)
	newCheckSum1 := crc32.Update(i3eCheckSum1, crc32.IEEETable, newData)
	//直接追加数据之后再计算
	newCheckSum2 := crc32.ChecksumIEEE(append(originalData, newData...))
	fmt.Println(newCheckSum1, newCheckSum2)

}

总结 

到此这篇关于golang标准库crc32使用的文章就介绍到这了,更多相关golang标准库crc32使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • go语言更高精度的Sleep实例解析

    go语言更高精度的Sleep实例解析

    这篇文章主要为大家介绍了go语言更高精度的Sleep实例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • GoFrame框架ORM原生方法对象操作开箱体验

    GoFrame框架ORM原生方法对象操作开箱体验

    这篇文章主要为大家介绍了GoFrame框架ORM原生方法对象操作的开箱体验,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Go语言中log日志库的介绍

    Go语言中log日志库的介绍

    本文给大家介绍Go语言中log日志库的概念使用技巧,log包定义了Logger类型,该类型提供了一些格式化输出的方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-10-10
  • go使用makefile脚本编译应用的方法小结

    go使用makefile脚本编译应用的方法小结

    makefile可以看作是make工具的脚本文件, 而make主要用来处理一系列命令。常用的比如用来编译和打包文件, 在C/C++的编译打包中应用最广泛了,这篇文章主要介绍了go使用makefile脚本编译应用,需要的朋友可以参考下
    2022-08-08
  • 一文详解go中如何实现定时任务

    一文详解go中如何实现定时任务

    定时任务是指按照预定的时间间隔或特定时间点自动执行的计划任务或操作,这篇文章主要为大家详细介绍了go中是如何实现定时任务的,感兴趣的可以了解下
    2023-11-11
  • go语言中的协程详解

    go语言中的协程详解

    本文详细讲解了go语言中的协程,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • golang文件内容覆盖问题的分析及解决

    golang文件内容覆盖问题的分析及解决

    通过golang读取数据库站点映射配置,生成nginx conf文件,并检查和重启nginx服务,已达到站点自动化部署目的,当目标文件中内容很长,而写入的内容很短时,目标文件内容无法完全覆盖,本文给大家介绍了解决方法,需要的朋友可以参考下
    2024-01-01
  • Gotify搭建你的消息推送系统

    Gotify搭建你的消息推送系统

    这篇文章主要介绍了Gotify搭建你的消息推送系统,今天要分享的是 gotify,是一个用 go 编写的消息服务端,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2024-01-01
  • 关于golang利用channel和goroutine完成统计素数的思路

    关于golang利用channel和goroutine完成统计素数的思路

    这篇文章主要介绍了golang利用channel和goroutine完成统计素数的思路详解,通过思路图分析及实例代码相结合给大家介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • 一文掌握gorm简介及如何使用gorm

    一文掌握gorm简介及如何使用gorm

    Gorm是一款用于Golang的ORM框架,它提供了丰富的功能,包括模型定义、数据验证、关联查询等,下面通过本文掌握gorm简介及使用方法,需要的朋友可以参考下
    2024-02-02

最新评论