CRC32用途及写法

Wesley13
• 阅读 985

CRC32

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

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

if (!checksum(ctx, request, requestHeader)) {
            response.setCode(ResponseCode.SYSTEM_ERROR);
            response.setRemark("crc32 not match");
            return response;
}




private boolean checksum(ChannelHandlerContext ctx, RemotingCommand request,
        RegisterBrokerRequestHeader requestHeader) {
        if (requestHeader.getBodyCrc32() != 0) {
            final int crc32 = UtilAll.crc32(request.getBody());
            if (crc32 != requestHeader.getBodyCrc32()) {
                log.warn(String.format("receive registerBroker request,crc32 not match,from %s",
                    RemotingHelper.parseChannelRemoteAddr(ctx.channel())));
                return false;
            }
        }
        return true;
    }


public static int crc32(byte[] array) {
        if (array != null) {
            return crc32(array, 0, array.length);
        }

        return 0;
    }


public static int crc32(byte[] array, int offset, int length) {
        CRC32 crc32 = new CRC32();
        crc32.update(array, offset, length);
        return (int) (crc32.getValue() & 0x7FFFFFFF);
    }
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
2年前
CRC校验查表法原理及实现(CRC
绪论在网上浏览了很多关于CRC校验的文章,基本上都是针对CRC校验原理的阐述以及关于CRC校验查表法的实际应用以及具体软件实现方法。_至于查的表是怎么来的,软件为什么要这样实现很多文章并没有说明_。本篇文章就针对这两点问题进行总结和归纳,有错误的地方欢迎大家评论区指出,不胜感激。_注意:本篇文章不涉及CRC校验的基本原理,如
Stella981 Stella981
2年前
STM32 实现内部Flash的读写(HAL库版)
  Flash中文名字叫闪存,是一种长寿命的非易失性(断电数据不丢失)的存储器。可以对称为块的存储器单元块进行擦写和再编程,在进行写入操作之前必须先执行擦除。一个NandFlash由多个块(Block)组成,每个块里面又包含很多页(page)。每个页对应一个空闲区域/冗余区域(sparearea),这个区域不是用来存储数据的,用于放置数据的校验值检测和
Wesley13 Wesley13
2年前
CRC32算法笔记
这几天在研究CRC32的计算过程,看了CRC算法的原理(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fen.wikipedia.org%2Fwiki%2FCyclic_redundancy_check%23Computation),也看了不少通过移位法实现的代码,但是算出的结果跟校验工
Stella981 Stella981
2年前
MQTT协议和Modbus协议比较
协议就是通信双方的一个约定,即,表示第1位传输的什么、第2位传输的什么……。Modbus协议主要构成是地址码/标识码,功能码,寄存器地址,数据报文等内容。由于modbus协议是请求/应答通信协议,其其中功能码主要用于表述该数据报文执行的功能,当服务器对客户机进行响应时,它使用功能码域来指示正常响应(无差错)或者异常响应(即出现某种差错),其中的modbu
Easter79 Easter79
2年前
STM32 实现内部Flash的读写(HAL库版)
  Flash中文名字叫闪存,是一种长寿命的非易失性(断电数据不丢失)的存储器。可以对称为块的存储器单元块进行擦写和再编程,在进行写入操作之前必须先执行擦除。一个NandFlash由多个块(Block)组成,每个块里面又包含很多页(page)。每个页对应一个空闲区域/冗余区域(sparearea),这个区域不是用来存储数据的,用于放置数据的校验值检测和
Stella981 Stella981
2年前
FastDFS安全注意事项
  对于互联网应用,FastDFS的标准使用姿势:通过FastDFSAPI进行文件上传等更新操作,storageserver上通过FastDFSnginx扩展模块使用HTTP方式下载文件。FastDFS的文件名由storageserver通过算法生成,生成的文件名中包含时间戳、文件大小、文件内容CRC32校验码、随机数等,因此FastDFS生成的
Wesley13 Wesley13
2年前
@RequestBody参数已经被读取,究竟是何原因?
不知道你们有没有对用户输入的东西进行过敏感校验,如果不进行校验,用户属于一些攻击脚本,那么我们的服务就挂逼啦!所以我们首先需要通过过滤器将用户的数据读出来进行安全校验,这里面涉及到一个动作,就是需要将用户的数据在过滤器中读出来,进行校验,通过之后再放行。问题如果我们的数据是get请求倒还好,但是如果是一些数据量比较大,我们需要通过postjs
Wesley13 Wesley13
2年前
TCP可靠传输&流量控制&拥塞控制
TCP可靠传输TCP可靠传输的工作原理1.无差错1:无差错:A发送分组M1,发送就暂停发送,等待B的确认,B收到M1就向A发送确认,A收到对M1的确认后再发送下一个分组。(若A收到连续的M1分组的确认信息,则证明M2缺失)2:出现差错:
Wesley13 Wesley13
2年前
C#中实现累加校验和计算和校验
为建立中文知识库加块砖       ——中科大胡不归0\.前言如果必须加入一种方法来校验协议数据,累加校验不失为一种好的方案。MD5计算出的Hash太长了,校验和不过1或2个字节,当然MD5的安全性也不是校验和能比的。1\.校验和原理1.1发送方生成检验和1.将发送的进行检验和运算的数据分成若干个16位
Wesley13 Wesley13
2年前
UDP通讯方式
简介一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,它一旦把应用的程序发送给网络层之后不保留数据的备份。但是因为没有很多安全性的校验使得它的传输速率特别的快。UDP提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,UDP传输的可靠性由应用层负责。所需的结构和方法\so