CRC32用途及写法

CRC32

今天在看rocketmq源码时,看到CRC32,就记录下来以供学习。主要用途: 

在远距离数据通信中,为确保高效而无差错地传送数据,必须对数据进行校验即差错控制。循环冗余校验CRC(Cyclic Redundancy Check/Code)是对一个传送数据块进行校验,是一种高效的差错控制方法。

1if (!checksum(ctx, request, requestHeader)) { 2 response.setCode(ResponseCode.SYSTEM_ERROR); 3 response.setRemark("crc32 not match"); 4 return response; 5} 6 7 8 9 10private boolean checksum(ChannelHandlerContext ctx, RemotingCommand request, 11 RegisterBrokerRequestHeader requestHeader) { 12 if (requestHeader.getBodyCrc32() != 0) { 13 final int crc32 = UtilAll.crc32(request.getBody()); 14 if (crc32 != requestHeader.getBodyCrc32()) { 15 log.warn(String.format("receive registerBroker request,crc32 not match,from %s", 16 RemotingHelper.parseChannelRemoteAddr(ctx.channel()))); 17 return false; 18 } 19 } 20 return true; 21 } 22 23 24public static int crc32(byte[] array) { 25 if (array != null) { 26 return crc32(array, 0, array.length); 27 } 28 29 return 0; 30 } 31 32 33public static int crc32(byte[] array, int offset, int length) { 34 CRC32 crc32 = new CRC32(); 35 crc32.update(array, offset, length); 36 return (int) (crc32.getValue() & 0x7FFFFFFF); 37 }
点赞
收藏

评论区

加载中...

相关推荐

CRC校验查表法原理及实现(CRC

绪论在网上浏览了很多关于CRC校验的文章,基本上都是针对CRC校验原理的阐述以及关于CRC校验查表法的实际应用以及具体软件实现方法。_至于查的表是怎么来的,软件为什么要这样实现很多文章并没有说明_。本篇文章就针对这两点问题进行总结和归纳,有错误的地方欢迎大家评论区指出,不胜感激。_注意:本篇文章不涉及CRC校验的基本原理,如

STM32 实现内部Flash的读写(HAL库版)

  Flash中文名字叫闪存,是一种长寿命的非易失性(断电数据不丢失)的存储器。可以对称为块的存储器单元块进行擦写和再编程,在进行写入操作之前必须先执行擦除。一个NandFlash由多个块(Block)组成,每个块里面又包含很多页(page)。每个页对应一个空闲区域/冗余区域(sparearea),这个区域不是用来存储数据的,用于放置数据的校验值检测和

CRC32算法笔记

这几天在研究CRC32的计算过程,看了CRC算法的原理(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fen.wikipedia.org%2Fwiki%2FCyclic_redundancy_check%23Computation),也看了不少通过移位法实现的代码,但是算出的结果跟校验工

MQTT协议和Modbus协议比较

协议就是通信双方的一个约定,即,表示第1位传输的什么、第2位传输的什么……。Modbus协议主要构成是地址码/标识码,功能码,寄存器地址,数据报文等内容。由于modbus协议是请求/应答通信协议,其其中功能码主要用于表述该数据报文执行的功能,当服务器对客户机进行响应时,它使用功能码域来指示正常响应(无差错)或者异常响应(即出现某种差错),其中的modbu

STM32 实现内部Flash的读写(HAL库版)

  Flash中文名字叫闪存,是一种长寿命的非易失性(断电数据不丢失)的存储器。可以对称为块的存储器单元块进行擦写和再编程,在进行写入操作之前必须先执行擦除。一个NandFlash由多个块(Block)组成,每个块里面又包含很多页(page)。每个页对应一个空闲区域/冗余区域(sparearea),这个区域不是用来存储数据的,用于放置数据的校验值检测和

FastDFS安全注意事项

  对于互联网应用,FastDFS的标准使用姿势:通过FastDFSAPI进行文件上传等更新操作,storageserver上通过FastDFSnginx扩展模块使用HTTP方式下载文件。FastDFS的文件名由storageserver通过算法生成,生成的文件名中包含时间戳、文件大小、文件内容CRC32校验码、随机数等,因此FastDFS生成的