http://blog.csdn.net/collin1211/archive/2009/03/20/4006453.aspx
一、數(shù)據(jù)摘要算法概述
數(shù)據(jù)摘要算法是密碼學(xué)算法中非常重要的一個(gè)分支,它通過對(duì)所有數(shù)據(jù)提取指紋信息以實(shí)現(xiàn)數(shù)據(jù)簽名、數(shù)據(jù)完整性校驗(yàn)等功能,由于其不可逆性,有時(shí)候會(huì)被用做敏感信息的加密。數(shù)據(jù)摘要算法也被稱為哈希(Hash)算法或散列算法。
常用的數(shù)據(jù)摘要算法主要以下幾大類:
1、CRC8、CRC16、CRC32
CRC(Cyclic Redundancy Check,循環(huán)冗余校驗(yàn))算法出現(xiàn)時(shí)間較長,應(yīng)用也十分廣泛,尤其是通訊領(lǐng)域,現(xiàn)在應(yīng)用最多的就是 CRC32 算法,它產(chǎn)生一個(gè)4字節(jié)(32位)的校驗(yàn)值,一般是以8位十六進(jìn)制數(shù),如FA 12 CD 45等。CRC算法的優(yōu)點(diǎn)在于簡(jiǎn)便、速度快,嚴(yán)格的來說,CRC更應(yīng)該被稱為數(shù)據(jù)校驗(yàn)算法,但其功能與數(shù)據(jù)摘要算法類似,因此也作為測(cè)試的可選算法。
在 WinRAR、WinZIP 等軟件中,也是以 CRC32 作為文件校驗(yàn)算法的。一般常見的簡(jiǎn)單文件校驗(yàn)(Simple File Verify – SFV)也是以 CRC32算法為基礎(chǔ),它通過生成一個(gè)后綴名為 .SFV 的文本文件,這樣可以任何時(shí)候可以將文件內(nèi)容 CRC32運(yùn)算的結(jié)果與 .SFV 文件中的值對(duì)比來確定此文件的完整性。
與 SFV 相關(guān)工具軟件有很多,如MagicSFV、MooSFV等。
2、MD2 、MD4、MD5
這是應(yīng)用非常廣泛的一個(gè)算法家族,尤其是 MD5(Message-Digest Algorithm 5,消息摘要算法版本5),它由MD2、MD3、MD4發(fā)展而來,由Ron Rivest(RSA公司)在1992年提出,目前被廣泛應(yīng)用于數(shù)據(jù)完整性校驗(yàn)、數(shù)據(jù)(消息)摘要、數(shù)據(jù)加密等。MD2、MD4、MD5 都產(chǎn)生16字節(jié)(128位)的校驗(yàn)值,一般用32位十六進(jìn)制數(shù)表示。MD2的算法較慢但相對(duì)安全,MD4速度很快,但安全性下降,MD5比MD4更安全、速度更快。
目前在互聯(lián)網(wǎng)上進(jìn)行大文件傳輸時(shí),都要得用MD5算法產(chǎn)生一個(gè)與文件匹配的、存儲(chǔ)MD5值的文本文件(后綴名為 .md5或.md5sum),這樣接收者在接收到文件后,就可以利用與 SFV 類似的方法來檢查文件完整性,目前絕大多數(shù)大型軟件公司或開源組織都是以這種方式來校驗(yàn)數(shù)據(jù)完整性,而且部分操作系統(tǒng)也使用此算法來對(duì)用戶密碼進(jìn)行加密,另外,它也是目前計(jì)算機(jī)犯罪中數(shù)據(jù)取證的最常用算法。
與MD5 相關(guān)的工具有很多,如 WinMD5等。
3、SHA1、SHA256、SHA384、SHA512
SHA(Secure Hash Algorithm)是由美國專門制定密碼算法的標(biāo)準(zhǔn)機(jī)構(gòu)—— 美國國家標(biāo)準(zhǔn)技術(shù)研究院(NIST)制定的,SHA系列算法的摘要長度分別為:SHA為20字節(jié)(160位)、SHA256為32字節(jié)(256位)、 SHA384為48字節(jié)(384位)、SHA512為64字節(jié)(512位),由于它產(chǎn)生的數(shù)據(jù)摘要的長度更長,因此更難以發(fā)生碰撞,因此也更為安全,它是未來數(shù)據(jù)摘要算法的發(fā)展方向。由于SHA系列算法的數(shù)據(jù)摘要長度較長,因此其運(yùn)算速度與MD5相比,也相對(duì)較慢。
目前SHA1的應(yīng)用較為廣泛,主要應(yīng)用于CA和數(shù)字證書中,另外在目前互聯(lián)網(wǎng)中流行的BT軟件中,也是使用SHA1來進(jìn)行文件校驗(yàn)的。
4、RIPEMD、PANAMA、TIGER、ADLER32 等
RIPEMD是Hans Dobbertin等3人在對(duì)MD4,MD5缺陷分析基礎(chǔ)上,于1996年提出來的,有4個(gè)標(biāo)準(zhǔn)128、160、256和320,其對(duì)應(yīng)輸出長度分別為16字節(jié)、20字節(jié)、32字節(jié)和40字節(jié)。
TIGER由Ross在1995年提出。Tiger號(hào)稱是最快的Hash算法,專門為64位機(jī)器做了優(yōu)化。
二、常用數(shù)據(jù)摘要算法的測(cè)試
1、測(cè)試方法
測(cè)試范圍 :常見的數(shù)據(jù)校驗(yàn)、摘要算法,主要有 CRC32、MD5、SHA1、SHA256、SHA384、SHA512
樣本數(shù)據(jù) :2G大小Vmware 虛擬機(jī)操作系統(tǒng)的磁盤文件,其中包含其中各種類型的文件,如二進(jìn)制文件和文本文件等。
軟件平臺(tái) :Windows、.NET Framework 2.0
硬件平臺(tái) :
機(jī)器A(SCSI Disk):軟件配置 Windows 2000 + .Net Framework 2.0;硬件配置 CPU:4 (Xeon),2.8G,RAM:2G ,HD:70 GB SCSI
機(jī)器B(IDE Disk):軟件配置 Windows 2003 + .Net Framework 2.0;硬件配置 CPU:1 (P4),2.8G,RAM:1G,HD:40 GB IDE
考慮到整個(gè)測(cè)試過程只是涉及到文件讀取與哈希值的計(jì)算,并無過多的與操作系統(tǒng)、軟件平臺(tái)、開發(fā)語言相關(guān)的操作,因此可以認(rèn)為上述測(cè)試方法的結(jié)果具有普遍性,即也適用于其它操作系統(tǒng)平臺(tái)(如Linux/Unix)或應(yīng)用語言/平臺(tái)(C、Java)。
2、測(cè)試結(jié)果
1)不同配置機(jī)器間的對(duì)比
在不同機(jī)器配置上的平均運(yùn)算結(jié)果如下表所示:
注1:配有SCSI磁盤的機(jī)器運(yùn)行時(shí)間反而比 IDE 磁盤時(shí)間長,可能是由于前者具有較多的應(yīng)用負(fù)載造成的,如Oracle、WebSphere等,而且其OS為 Windows 2000,在之上運(yùn)行 .NET 應(yīng)用程序可能與 Windows 2003 的效率有所差別
注2:上述算法中,只有 CRC32 沒有包含在.NET Framework 中,而是使用C#單獨(dú)實(shí)現(xiàn)的,因此可能會(huì)對(duì)其測(cè)試結(jié)果帶來一些影響。
2)不同算法的CPU占用率比較
在不同的算法運(yùn)行時(shí),在機(jī)器B上監(jiān)控其對(duì)于 CPU 的平均使用時(shí)間,結(jié)果如下表所示:
三、一些測(cè)試結(jié)論
數(shù)據(jù)摘要算法的處理是很快的,在一般配置的PC機(jī)上使用MD5算法,處理1G的文件數(shù)據(jù)只需20-30秒(有些專用設(shè)備聲稱達(dá) 3GB/秒),不會(huì)對(duì)應(yīng)用或機(jī)器帶來過多負(fù)載;
MD5、SHA1雖然被發(fā)現(xiàn)存在缺陷(碰撞),但在近幾年內(nèi),仍然可以大量使用;
SHA256/384/512 的速度較慢,可以用于少量數(shù)據(jù)摘要,目前不適合用于大文件校驗(yàn);
本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/collin1211/archive/2009/03/20/4006453.aspx