在下载Warez时经常可以看到一些.sfv的文件,到底这种文件是这么回事呢,这里有比较详细的说明:
sfv是simple file verification(简单文件校验)的简写,它采用的是crc32的校验算法。
crc32校验产生32bit(8位十六进制数)校验值,所以一般大家看见的文件“sfv值”是一个8位的16进制数。
由于crc32产生校验值时源数据块的每一个bit位都参与了计算,所以数据块中即使一位bit发生变化,也会得到不同的crc32值(但对于两个完全不相干的文件是有可能有相同校验值的,因为校验值的取值空间有限——2^32,而现实中文件数量一定是大大超过这个值了)。
关于crc32校验的具体算法,大致的过程是(没兴趣的可以忽略这一段):
采用多项式除法,将一个数据块(不论大小)中的每一位(bit)作为各项系数来生成一个很长的多项式(例如对一个16进制的数F0h,可以生成多项式1*X^7 + 1*X^6 + 1*X^5 + 1*X^4 + 0*X^3 + 0*X^2 + 0*X^1 + 0*X^0,化简一下,就变成X^7 + X^6 + X^5 + X^4),然后将生成的多项式除以如下被称为“发生器多项式”的特殊多项式(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+1),取结果的余数部分,就是我们需要的crc32(也就是sfv)值了。至于除法的具体算法,有硬件实现也有很多软件实现,这里就不再赘述。
md5是一个消息摘要算法(也叫单向散列函数)的名称。它通过一定的算法(任何有关应用密码学的书里都有具体的算法表述)根据源数据的每一位bit最终产生一个128bit(32位十六进制数)的校验值。由于长度达到一定的要求,所以在密码学领域中有一定应用(用它来校验文件理论上讲由于有更大的取值空间而肯定比sfv更安全,但实际上似乎sfv就够用了)。