什么是CRC和CRC检验?

本文详细介绍了CRC(循环冗余检查)的基本概念及其工作原理。CRC是一种数据传输检错功能,通过对数据进行多项式计算并附加到帧尾部来实现。文章还解释了CRC校验的多项式编码方法,并说明了其检错能力。

名词解释

CRC(循环冗余检查)--一种数据传输检错功能,对数据进行多项式计算,并将得到的和数附在帧的后面。接收设备也执行类似的算法。

什么是CRC校验?

CRC校验采用多项式编码方法。
被处理的数据块可以看作是一个二进制多项式,例如,10110101可以看作是2^7+2^5+2^4+2^2+2^0,多项式乘除法运算过程与普通代数多项式的乘除法相同。多项式的加减法运算以2为模,加减时不进,错位,和逻辑异或运算一致。
采用CRC校验时,发送方和接收方用同一个生成多项式g(x),并且g(x)的首位和最后一位的系数必须为1。CRC的处理方法是:发送方以g(x)去除t(x),得到余数作为CRC校验码。校验时,以计算的校正结果是否为0为据,判断数据帧是否出错。
CRC校验可以100%地检测出所有奇数个随机错误和长度小于等于k(k为g(x)的阶数)的突发错误。所以CRC的生成多项式的阶数越高,那么误判的概率就越小。
CCITT 建议:2048 kbit/s的PCM基群设备采用CRC-4方案,使用的CRC校验采用16位CRC校验。在IBM的同步数据链路控制规程SDLC的帧校验序列FCS 中,使用CRC-16。g(x)的位数越高,检错能力就越强。由于CRC-32的可靠性,把CRC-32用于重要数据传输十分合适,所以在通信、计算机等领域运用十分广泛。在一些UART通信控制芯片(如MC6582、Intel8273和Z80-SIO)内,都采用了CRC校验码进行差错控制;以太网卡芯片、MPEG解码芯片中,也采用CRC-32进行差错控制。
CRC32(**Cyclic Redundancy Check 32**)是一种常用的**循环冗余校验算法**,用于检测数据传输或存储过程中是否发生了**错误**。它通过计算一个 32 位(4 字节)的校验值(称为 CRC 值),来验证数据的完整性。 --- ### ✅ CRC32 的基本原理 CRC32 是基于**多项式除法**的一种校验算法。它将数据看作一个大的二进制数,然后用一个固定的多项式对其进行除法运算,得到的余数就是 CRC 校验值。 常见的 CRC32 使用的多项式是: ``` x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1 ``` 对应的十六进制表示为:`0xEDB88320`(在计算中常用) --- ### ✅ CRC32 的用途 - **数据完整性校验**:例如在 ZIP、PNG、RAR 等文件格式中使用 CRC32 来确保文件未被损坏。 - **网络通信**:如 Ethernet、PPP 协议中用于校验数据帧是否出错。 - **版本控制**:Git 使用 CRC32 作为辅助手段来校验对象数据完整性。 - **嵌入式系统**:常用于校验 Flash 存储中的数据块。 --- ### ✅ CRC32 的特点 | 特性 | 说明 | |--------------|----------------------------------------------------------------------| | 输出长度 | 固定为 32 位(4 字节) | | 算法类型 | 非加密型校验码,不能用于安全目的 | | 抗误码能力 | 可以检测出大多数常见错误,但不能保证 100% 检测 | | 计算速度 | 快速,适合嵌入式设备实时系统 | | 可逆性 | 不可逆,无法通过 CRC 值还原原始数据 | | 冲突概率 | 有冲突可能,两个不同数据可能有相同的 CRC32 值(碰撞) | --- ### ✅ Python 示例:计算 CRC32 ```python import binascii data = b"Hello, world!" crc32_value = binascii.crc32(data) & 0xFFFFFFFF # 确保为 32 位 print(f"CRC32: {crc32_value:08X}") ``` 输出: ``` CRC32: 47186584 ``` --- ### ✅ CRC32 与其他校验算法对比 | 算法名称 | 输出长度 | 是否加密安全 | 用途 | |----------|-----------|----------------|--------------------------| | CRC32 | 32 位 | 否 | 错误检测、数据完整性校验 | | MD5 | 128 位 | 否(已不安全) | 文件唯一性标识(已弃用) | | SHA-1 | 160 位 | 否(已不安全) | 数据指纹(逐步淘汰) | | SHA-256 | 256 位 | 是 | 安全数据摘要、数字签名 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值