如何更有效破解CRC16校验

率先,让咱们来谈谈CRC16是什么。 。

CRC是一种罕见的反省。,而CRC16呢,其材料原因是使合基准结实为16位。,自然,CRC8。,CRC32.

你以为我能解说得很复杂吗?对。,我会用一种复杂的办法来解说。。当你读定冠词的时辰,为了更合适的地变得流行定冠词,你需求看什么? 这是CRC16反省。。

咱们经用的MODBUS 的CRC校验,也这是CRC16反省。的一种。门路过modbus 合同书人,咱们葡萄汁熟识CRC16检验。。

渡字,CRC16是概要的算术公式集。,它的算术记载无论健康状况如何是概要的音节。。它的算术追逐是把音节的每一位都放上。,拥有关涉计算。。

这是我从百度百科全书中来的形容。:

五金器具计算追逐

1。设置CRC流露,并将FFF(HEX)分合理的服装它。。

2。XD记载的第概要的8位性格和16位的低8位,并将结实贮存在CRC流露中。。

3.CRC流露在右侧使位移。,MSB零点,剪下和反省LSB。

4。倘若LSB为0,反复第三步;倘若LSB为1,CRC流露与多项的码差异。。

注意到:在右移位垄断,LSB LSB葡萄汁是LSB。,更确切地说,LSB垄断的第三步。。

5。反复第三步和月的第四日步,直到8档完整的为止。。在这点上,完整的8位记载处置。。

6。反复秒到第五步直到拥有记载被处置。。

7。终极CRC流露的使满意是CRC值。。

现时让咱们来看一眼CRC16的概要的拆移。 的算法:(也在网上找到)

PRT是要计算的记载。,LEN是音节数。,VA是多项的。。

因而成绩是。。

从五金器具计算追逐和算法重大聚会可以看见, CRC16算法,最要紧的决定因素是多项的。,自然,死气沉沉的概要的辅佐决定因素,即原值。。

差异的CRC16,多项的是差异的。。

差异的基础资料和多项的,它长了差异的CRC16反省。。

可以看出,罕见的CRC16只不过这些。,现实上,死气沉沉的另概要的罕见的多项的是A00。。

不理CRC16 怎地交替,它也在不竭交替。。

现时让咱们从大约开端。,健康状况如何全然破解CRC16。

环境1 将末版概要的音节修正为00或80。.

破解办法:

威斯康星州 xx xx 00 的CRC16 值 0xYYYY 

和XX xx xx 80 的CRC16 值 0xZZZZ 给予帮助异或,

即0xYYYY异或0xZZZZ 你可以来多项的。 0xNNNN

记起

以基准CRC16为例。,其多项的为0xa00。

部分计算11。。 22 33 44 00 和11 22 33 44 80结实

来的结实为

11 22 33 44 00  7435

11 22 33 44 80  D434

7435与D434 XOR的结实是A00。 .

让咱们用另概要的非基准多项的。,以0x1234为例。。

部分计算11。。 22 33 44 00 和11 22 33 44 80 的结实

11 22 33 44 00  17FF

11 22 33 44 80  05CB

话说回来将0x17FF和0x05CB给予帮助异或,结实是0x1234。。

因而,概要的收场白是:

在一组大楼或记载包中。,倘若只更改末版概要的音节的末版一位。,来的两个CRC16结实给予帮助异或,计算多项的。。

咱们为什么存在这般的收场白呢?

让咱们看一下信号经营的末版一步。。

1122334400和1122334480经过的差值是末版一位。,因末版概要的音节的最高的音节是末版概要的染指的音节。。算法是1122334400的结实。,话说回来判别末版概要的是1。,倘若是1,再次运转结实。,亦即和多项的给予帮助异或,更确切地说,在全体的经营追逐中为1122334480。,当计算到末版一位时,结实是0x17FF。,这时辰,话说回来决定最高的臀部可能性的选择为1。,最高的水平为1。,再将0x17FF与多项的0x1234给予帮助异或,来的0x05CB。这是CRC结实的1122334480。。

因而,咱们需求计算多项的值。,你需求找到无论健康状况如何两组音讯。,只修正末版概要的音节的最高的音节。,将存在的两个CRC结实给予帮助异或,计算多项的。。

原值普通为0x000或0xFFFF。。倘若将0x0000,0xFFFF交换的计算弱发生结实。,普通的话,原值可以从0x00遍历到0xFFFF。,可以计算暴露。。平坦的需求几秒钟来穿越U16,。这执意同一的人的辅佐强行receive 接纳。。

让咱们以一组记载为例。,让我不至于多项的是什么。。依据下面的记载计算多项的。。

1122334400 66BB

1122334480 259A

话说回来咱们把66BB和259A给予帮助异或,来的结实是 4321 。

没错,多项的为4321。,据我看来赚得你是对的。。咋一看,计算CRC16否定难。。

看一眼器计算的结实。,我缺勤屏幕你。。

状况二:无法更改末版概要的音节的末版一位。。

比方,结果却改建倒计时的秒个音节。,怎地办呢。或及其他音节。

在这种状况下,CRC的结实不克不及直率的或完整差异。。

举个状况吧。。更基准CRC16?, 多项的为a00。。

112233440055  2874 

112233448055  E815 

112233440066  3D34

112233448066  FD55

2874异或E815 ,结实为 C061

3D34异或FD55 ,结实为 C061.

可以看出,大楼中,倘若独自地在内的概要的改建了。,及其他元素供养不动或适合同一的的词。,0或1,一位数。 交替来的两个CRC16值给予帮助异或,XOR的结实是同一的的。。

最适当的,倘若末版概要的音节改建了最高的臀部。,这两个CRC16XOR结实是直率的多项的。。

这种状况怎地样?,清楚地多项的为a00。。而是,CRC16值XOR的结实是C061。。。。

咱们赚得大楼112233440055。 里,强制的有概要的或多个多项的和原值。,CRC16手术后,结实是2874。

让咱们写概要的顺序来修订它。。

unsigned short  crc16_crc(未署名的) char  *ptr,int  len,unsigned short 佤族)        // 

unsigned short  i,j,tmp,CRC16;

CRC16=0x00;

for (i=0;i

{  

    CRC16=*ptr^CRC16;

    for (j=0;j< 8;j++)

     {

         tmp=CRC16 & 0x0001;

          CRC16 =CRC16 >>1;

        if (TMP)

         CRC16=CRC16 ^ va;    

      }

 *ptr++;

}

 return (CRC16);

}

大约重大聚会呢?,PRT是要计算的记载。,LEN是音节数。,VA是多项的。。

亦即咱们要经过大约重大聚会来遍历拥某个多项的,让咱们看一眼有某些数量结实婚配。。

为什么在这一点上有0x874和0x728?,因它们切中要害相当是低音节。,有些是先前的高音节。

可以看出,仅仅是A00。。为什么呢。因我刚设置的原值是0x000。,最适当的穿越的结实。,来的是A00。。这否定要紧。。咱们改建原值并重行计算它。。倘若你不赚得原值,,而是多项的是0xa00。。让咱们改造一遍。。

新的结实是:

112233440055  5FC8

112233448055  9FA9

112233440066  4A88

112233448066  8AE9

咱们更先用旧办法。

5FC0异或9FA9,结实是C061。。

4A88异或8AE9,结实是C061。。.

使震惊,缺勤惊喜。,变乱责备偶尔的。。原值是某些数量?,让我嗣后再跟你谈。,你为什么无形的首字母的的代价呢?。

话说回来咱们再次运转顺序。,注意到,结实是背面的的。

我的CRC16重大聚会的Windows 默认值是0x000。,而是现实原值责备0000。,遍历每个多项的。给予帮助下,在某种程度上,1s可以来遍历结实。,结实是B562。。大约多项的离A000太远了。。自然,也在某种程度上,原值和多项的是遍历的。,结实是可以决定的。。阅历40亿次?。你弱相似的盼望这段工夫。。同时,多项的与原值一同遍历。,可能性有很多结成。。倘若咱们画100个结成,这么,健康状况如何从这100个C中选择孰多项的和原值?。自然,咱们可以再回到100个结成。。

确实地说,基本,我变得流行CRC16。,大约CRC16反省是一一对应的。。

更确切地说,支付两个音节。,更确切地说,U16从0000到FFFF用于CRC16手术。,来65536个结实。。这也每个U16的记载。,整个对应于U16的结实。,缺勤反复。。

复杂地说,倘若我有1,2,3,4这四数字是密文。,密文经过的对应相干是:

1>2

2>4

3>1

4>3 

这是一封许可证。。最适当的CRC16。,是从0到65535都可以找到另概要的0到65535里的一一对应相干。

倘若你明白的这点,你会碰见,当将多项的与原值一同遍历。,你会碰见,每个原值,都能找到概要的多项的CRC16手术后,将婚配结实。。这执意同一的人的抵触。。每个人都完毕了。,你会来65536种可能性的结实。,或许更多。那你还需求将这65536个结实里再代入到另概要的要旨里去检验可能性的选择相当的。大约工夫和加载比较大。,倘若你缺勤一台32核CPU的电脑或许一颗相似的盼望的心,我劝你保持大约办法。。

这是我的办法。

环境二裂法:

112233440055  5FC8

112233448055  9FA9

112233440066  4A88

112233448066  8AE9

5FC0异或9FA9,结实是C061。。

4A88异或8AE9,结实是C061。。.

让咱们装出这四组记载。,对多项的和基础资料的愚昧。可是我告知你,我用A00停止考查。,你几乎不敢相信。。

下面的办法罕有的要紧。。

废话多说,直率的上信号:

unsigned short  crc16_crc(未署名的) char  *ptr,int  len,unsigned short 佤族)        // 

unsigned short  i,j,tmp,CRC16;

CRC16=0x00;

for (i=0;i

{  

    CRC16=*ptr^CRC16;

    for (j=0;j< 8;j++)

     {

         tmp=CRC16 & 0x0001;

          CRC16 =CRC16 >>1;

        if (TMP)

         CRC16=CRC16 ^ va;    

      }

 *ptr++;

}

 return (CRC16);

}

int main()

{

 int i;

 unsigned short out;

 unsigned  short out2;

 unsigned char test_buff1[]={0x11,0x22,0x33,0x44,0x00,0x55};

 unsigned char test_buff2[]={0x11,0x22,0x33,0x44,0x80,0x55};

 unsigned char test_buff3[]={0x11,0x22,0x33,0x44,0x00,0x66};

 unsigned char test_buff4[]={0x11,0x22,0x33,0x44,0x80,0x66};

(I=0;I)<0xffff;i++)

  {

out=crc16_crc(test_buff1,sizeof(test_buff1),(未署名的) 短裤)

out2=crc16_crc(test_buff2,sizeof(test_buff2),(未署名的) 短裤)

if(((out^out2)==0xC061))

{

Printf(概要的和秒组记载结实) :%x \r\n”,i);

}

  }

(I=0;I)<0xffff;i++)

  {

out=crc16_crc(test_buff3,sizeof(test_buff3),(未署名的) 短裤)

out2=crc16_crc(test_buff4,sizeof(test_buff4),(未署名的) 短裤)

if(((out^out2)==0xC061))

{

PROTF(第三和月的第四日组记载结实) :%x \r\n”,i);

}

  }

到了在这一点上,你还在想结实是什么。,为什么咱们会从这些计算中来结实?。

自然,可能性会有多个结实。,但普通结实弱超越10倍。。同时,基本,咱们运用两组记载经营。,共享结实,它强制的是多项的值。。

到在这一点上,你可能性会问。,我赚得多项的。,我不赚得首字母的的代价是什么。,这很复杂。,你可以遍历原值,话说回来暴露。。

重大聚会PRT是要反省的记载。,LEN是音节数。,VA是原值。。多项的是CRCPO=0xa00。

话说回来遍历结实。,原值为0x1234。。

现时让咱们破解概要的新的CRC16。

更原始记载?,但我弱告知你忧虑多项的和设定初值。。你遵照同一的办法。。

112233440055  1E67

112233448055  6FCD

112233440066  3132

112233448066  4098

(十六妖法)

1E67异或6FCD是71AA

3132异或 4098 它它也71AA。。

现时咱们对多项的和基础资料的愚昧,咱们率先运用该办法找到多项的。。

这般,咱们碰见多项的值是0x55 55。。现时让咱们找出原值。。

可以看出,两个结实已婚配。。而是为什么两个原值婚配?。

因我运用的多项的值是0x55 55。,因责备拥某个多项的都能使获得CRC16是单对单的。。

因而成绩就在在这一点上。。可以用差异的值设置原值。,多项的值是恣意的吗?。

不,它责备。

鉴于CRC16的这种算法,这是概要的特别的公式集计算。。否定是拥某个多项的都能达到CRC16的一一对应相干。。有可能性有相当多项的。,1对应的999将呈现。,10对应于999,100对应于999。

这种状况下,抵触的概率会更大。。抵触常常被用来毁坏合同书和密码电文。。通常由于合同书或编码算法。,碰见相当漏出物后,话说回来停止一次抵触实验。,可以找到婚配密码电文所需的记载。,完整的罕有的解密。,同时也应验了开裂的追逐。。

    经用CRC16算法,也有经用的查表办法。,为什么咱们可以运用查表法?,输入和输入是一一对应的。。输入为U16。,你可以使获得U16的输入。,缺勤反复输入。。依据这一标点?,CRC16算法可以人的皮肤要紧记载。。在文字的末了。

 因而,环境二裂法执意,

1 率先找到两组或四组记载。。(独自地概要的一块被改建)。,及其他音节记载不动

112233440055  1E67

112233448055  6FCD

112233440066  3132

112233448066  4098

(十六妖法)

2 将对应的两组记载的CRC16给予帮助异或。

1E67异或6FCD是71AA

3132异或 4098 它它也71AA。。

3 经过迭代多项的婚配XOR结实与咱们的手册分歧。。

4 找多项的后,交换多项的。,遍历原值。

以下是CRC16。 让我做概要的粗略的总结。

下面的办法怎地样?,用于法线CRC16反省。。

倘若你仔细的鉴定书互联网网络上的信号,或绍介及其他人。,你会碰见右移和左移的分别。。

诸如,我运用的信号是在右侧的。,你可以看见外面的重大聚会。,它运用右移位经营。。因大约算法运用右移位。,因而末版概要的音节被计数。,最高的臀部是末版一次经营。,这使得环境1中,倘若只更改末版概要的音节的最高的臀部。,来的两个CRC16值给予帮助异或,咱们来了多项的。。

倘若你的算法运用左移位,,末版概要的算术位是末版概要的音节的末版一位。。此刻末版概要的音节的最底下的音节葡萄汁改建。。

连续的一段时间和连续的一段时间。。

CRC16除得体的外,你死气沉沉的什么及其他的效能?。

某个。

可以用于人的皮肤特别音节或要紧音节停止播送。

大约效能估价99%门路CRC16的人都不太运用过或知情过吧。

让我给你举个状况。,以基准CRC16为例。。因基准CRC16是输入ANN经过的一一对应相干。。

诸如,我有概要的要发送的音讯。,112233440088 ,在内的,88 大约音节是罕有的要紧的。,我无意经过明白的主题范围。。

112233440088的CRC校验是71B4.

因而我可以人的皮肤88。。

新音讯是

112233440071B4.

接纳音讯后,接纳素养,因合同书是单方都赚得的。,接纳素养就可以从112233440000到1122334400FF停止遍历,找到概要的由CRC16计算的独一无二的值为71B4。。因而咱们赚得大约要紧记载是88。。

话说回来发送者可以重行计算CRC16并再次发送11223、334、711B4。,

112233440071B45033

您可以确保记载完整性。,它还扩大了使生裂缝的困难,大大地使还原了概率。,更轻易朦胧的分裂的人。。

概要的CRC16 可以人的皮肤两个音节。。

CRC8可以人的皮肤概要的音节。。

概要的CRC32可以人的皮肤四音节。。

在该算法中,经用于保卫要紧记载。,这也扩大了开裂的困难。。自然,运用该算法,普通来说,它次要是外面的素养。,别问我怎地赚得的。。

末版,罕有的恩义你。

在线计算CRC器,给了我考查的促进。。我也向你新郎。。

以后,我将创作相当设计。,合同书,产业把持和及其他有不利于的技术文字,请注意到留言。。

倘若有转载,请表明出处。