经常有人问,说CRC、MD5、SHA1都是计算一个校验值的,到底有何区别
相同点:
CRC、MD5、SHA1都是通过对数据进行计算,来生成一个校验值,该校验值用来校验数据的完整性。
不同点:
1. 算法不同。CRC采用多项式除法,MD5和SHA1使用的是替换、轮转等方法;
2. 校验值的长度不同。CRC校验位的长度跟其多项式有关系,一般为16位或32位;MD5是16个字节(128位);SHA1是20个字节(160位);
3. 校验值的称呼不同。CRC一般叫做CRC值;MD5和SHA1一般叫做哈希值(Hash)或散列值;
4. 安全性不同。这里的安全性是指检错的能力,即数据的错误能通过校验位检测出来。CRC的安全性跟多项式有很大关系,相对于MD5和SHA1要弱很多;MD5的安全性很高,不过大概在04年的时候被山东大学的王小云破解了;SHA1的安全性最高。
5. 效率不同,CRC的计算效率很高;MD5和SHA1比较慢。
6. 用途不同。CRC一般用作通信数据的校验;MD5和SHA1用于安全(Security)领域,比如文件校验、数字签名等。
CRC32和MD5都足够均匀稳定,但CRC32比MD5更有效率.
MD5是单向散列算法.单向散列算法通常用于加密,因为它们具有属性(每个设计),很难找到产生特定哈希值的输入.具体来说,很难使两个不同的输入给出相同的单向散列.他们经常被用来表示自生成哈希代码以来,一些数据没有被有意地改变.由于MD5是单向散列算法,所以重点在于安全性超速.不幸的是,MD5现在被认为是不安全的.
CRC32旨在检测数据的意外更改,通常用于网络和存储设备.该算法的目的不是为了防止故意改变,而是要捕捉网络错误和磁盘写入错误等事故.该算法的重点在于速度比安全性更高.