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,这个值是从哪开始计算出来的,,我们并不知道,我们的任务是穷举出它的开始地址,如果用顺序计算的方法,将会是一个很大的计算量了,还请各路高手,赐教.如何实现倒序穷举的思想.
扫码下方或搜索关注公众号“卫星参数网”,独家内幕新闻!
