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语言实现Base62编码的三种方式以及对比分析

    基于Go语言实现Base62编码的三种方式以及对比分析

    Base62 编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,本文给大家介绍了Go语言实现Base62编码的三种方式以及对比分析,需要的朋友可以参考下
    2025-05-05
  • Go语言结构体(Struct)和接口(Interface)详解

    Go语言结构体(Struct)和接口(Interface)详解

    本文主要介绍了Go语言结构体(Struct)和接口(Interface),详解其定义、匿名字段、值/指针接收器等特性,探讨接口的隐式实现、类型断言及组合应用,下面就一起来了解一下
    2025-09-09
  • GO的range如何使用详解

    GO的range如何使用详解

    本文主要介绍了GO的range如何使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 优雅管理Go Project生命周期

    优雅管理Go Project生命周期

    这篇文章主要为大家介绍了如何优雅的管理Go Project生命周期,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Go读取yaml文件到struct类的实现方法

    Go读取yaml文件到struct类的实现方法

    本文主要介绍了Go读取yaml文件到struct类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Go利用GJSON组件解锁JSON读取新姿势

    Go利用GJSON组件解锁JSON读取新姿势

    Go 标准库提供了 encoding/json 包用于处理 json 数据,同时第三方库 GJSON & SJSON 也在 json 处理方面表现出色,下面我们就来看看如何使用GJSON解锁JSON读取新方法吧
    2025-03-03
  • Golang 端口复用测试的实现

    Golang 端口复用测试的实现

    这篇文章主要介绍了Golang 端口复用测试的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 解决go echo后端处理跨域的两种操作方式

    解决go echo后端处理跨域的两种操作方式

    这篇文章主要介绍了解决go echo后端处理跨域的两种操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • golang实现的文件上传下载小工具

    golang实现的文件上传下载小工具

    这篇文章主要介绍了golang实现的文件上传下载小工具,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-12-12
  • Go 语言中的死锁问题解决

    Go 语言中的死锁问题解决

    本文主要介绍了Go 语言中的死锁问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08

最新评论