关于 CRC32 核验算法

CRC32  就是 CRC 多项式的模 2 除法,也叫异或除法,把除法的规则变为异或,其它一样,但一个长的数据直接异或除法还是有难度,于是就有了查表法,查表法的原理网上也有很多文章,下面是自己的理解,想分而治之把数据分成多个块,用查表法,就要用下面的公式:

D = (a xor b) xor_div c;
a = (A xor_mul c) xor AQ;
b = (B xor_mul c) xor BQ;

其中 :

  • xor 表示异或,
  • xor_div 表示异或除法,
  • xor_mul 表示异或乘法,
  • xor_rem 表示异或除法余数

A,B  分别为 a, b 异或除以 c 的商,

而 AQ,BQ  分别为 a, b 异或除以 c 的余数,

数据分成多个块,结果要对,便要证明下式:

(AQ xor b) xor_div c , (a xor b) xor_div c 两者的异或除法余数相等

上面符号看起来很别扭,把符号变成函数应该会舒服很多:

D = xor_div(xor     (a , b), c);
a = xor    (xor_mul (A, c), AQ);
b = xor    (xor_mul (B, c), BQ);

xor_rem (xor_div (xor (AQ , b))) == xor_rem (xor_div (xor (a, b), c));

或者为 lisp 样式

D = (xor_div(xor a   b)  c);
a = (xor    (xor_mul A c) AQ);
b = (xor    (xor_mul B c) BQ);

(xor_rem (xor_div (xor AQ  b))) == (xor_rem (xor_div (xor a b)  c));

至于证明这个等式,我不会。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值