穷举crc32算法??
浏览:1198 发布日期:2014-10-31

dvb,中九,dvd以及各种数据,都会使用crc32检验手段,

本人抛砖引玉,发一个顺序穷举crc32_mpeg的校验实现代码;希望求得一个倒序crc32穷举算法的思路.

顺序穷举crc32实现思想如下:

根据数据crc32置放规律,普遍以crc32校验值的前面某处开始校验,一直到放置校验码的前一个字节结束.

首先我们不知道crc32校验的放置;

假设我们知道是从位置0x00000000处开始,位是不知道哪里结束,哪里是crc的值.这时可以用顺序crc穷举思想,

   for (i=0; i<len-4; i++)
      {
        crc = (crc << 8) ^ Crc_mpeg_table[((crc >> 24) ^ data) & 0xff];
      //计数据crc32值,

        if(i>0x30000)//从0x30000开始取比较值,这个可以修改,大概估计一下多少,提高效率
          {
            tmp+= data[i+4];//这个tmp是我用来取比对crc32的,取校验位置后面的四位数
            if(tmp==crc){check=true;size=i+5;break;}
//如果crc和取的比对值相同,就退出循环,
            tmp<<=8;
          }
        }

上面是实现其乐达校验穷举算法的代码,当然这种算法,是只能顺序计算,并且crc32的校验码要放在被校验数据后面才可以,

如果碰上,不知道是从哪开始,但是知道crc码的位置,并且知道它的值,这时,如何穷举计算crc32,这是我关注的问题,

假设 100000后面有一个crc32,这个值是从哪开始计算出来的,,我们并不知道,我们的任务是穷举出它的开始地址,如果用顺序计算的方法,将会是一个很大的计算量了,还请各路高手,赐教.如何实现倒序穷举的思想.

扫码下方或搜索关注公众号“卫星参数网”,独家内幕新闻!

卫星参数网公众号