crc32校验算法_带你学加密丨WinACE中的CRC32

本文介绍了CRC32校验算法的基本原理,包括生成多项式和计算过程,并结合WinACE中的CRC32校验码计算,探讨了在实际应用中的位反转和16位校验码的处理方法。
摘要由CSDN通过智能技术生成

* 几天前(文章是2月底写完的),WinRAR曝出一个存在了19年的安全漏洞,实验室的@浮萍大佬在第一时间进行了复现分析,其中用一个非常巧妙的方法获取了修改后的CRC值。通过常规CRC-32算法 (zip和gzip通用) 计算后得到的值与它并不一致,这让我感到十分好奇。遗憾的是,在随后圈里刮起的分析预警风里,也没能发现一篇满足我好奇心的。算了,还是自己动手吧。

CRC基础

CRC,Cyclic Redundancy Check (循环冗余校验) ,是一个根据网络数据包或文件等数据生成固定长度校验码的散列算法,通常用于网络传输、解压缩等过程中的数据正确性校验。

常见的CRC算法有CRC-8、CRC-12、CRC-16和CRC-32,及各种衍生版本,它们主要的不同在于校验码长度和几个决定运算结果的参数上。

本文以CRC-32为主。

计算过程

CRC的计算和校验中除了上面提到的参数之外,还有几种不同的算法实现。这些概念理论较多篇幅较大,如果有必要再另写文章讨论细节,这里就暂时先跳过了。

不过简单的说,就是通过生成多项式 (见下面生成多项式章节) 对原始数据进行模2除,所得余数即CRC校验码。校验方拿到原始数据和CRC校验码,将CRC校验码补入原始数据之后组成待校验数据 (该过程也可在发送数据之前完成) ,再利用相同的生成多项式对待校验数据模2除,判断所得余数是否为0,是则表示与原始数据一致。

其中,模2除与算术除的区别是,它使用异或运算代替减运算降低了运算

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值