3DES、AES、RC6、TEA、RSA、MD5、SHA1、SHA256大聚齊

轉自:http://blog.csdn.net/mmz_xiaokong/article/details/25181927


前兩天想幫朋友做一個ARM/STM32的ISP脫機下載器,想到固件平時是保存在外部SPI ROM裏的需要加密。這兩天在網上研究了一下流行的文件加密方法並調試和整理了一下,特此公佈。先簡單的掃掃盲,大家可以邊看邊下載呵。


DES---研究過加密的朋友十分熟悉,老牌的加密方法了。這是一個可逆的對稱加密算法,也是應用最廣泛的密鑰系統。好像是從1977年美國政府開始採用的。大家都看過U-571吧,DES的思路就是參照二戰時期盟軍繳獲的德軍恩格瑪加密機,不過DES比那個要NB的多多了。到現在爲止,除了差分分析法和線性分析法外只有暴力窮舉法了。前兩種方法不是密碼學家或數學家都不懂呵,不過窮舉DES,以現有我們大家都可以掌握的技術手段,恐怕沒個幾百上千年下不來呵。不過,咱們破解不了,不能說明就沒人或沒有設備破解不了。正因爲如此,所以才衍生出了3重DES加密。常規的DES密鑰是64位的(實際上有8位是校驗用),而3DES是128位(當然有16位也是校驗用)。增加密鑰長度並增加運算量來防止破解,並在後來的AES出來之前確定爲過度方案。不過現在即便有了AES,3DES也沒少用,它依然很NB。
下載DES.RAR

AES---它是一種高級加密標準,也叫Rijndael算法,2002年成爲標準。它是用來代替原來的DES加密方法的。它也是一個可逆的對稱加密算法。研究過IAP的朋友應該明白,把做好的固件程序通過AES加密後發佈,用戶可以通過IAP的方式來在線升級程序,而開發者則不必擔心自己的生產代碼流失。即能加密又能還原,這就是可逆加密算法,這也是我們想用到的。AES在早期的方案徵集時就規定了要軟硬件可以很好的集成,所以它也比較小,程序量比DES要少一些。
下載AES.RAR

RC6---有個算法RC4聽說過吧,在無線傳輸和串行流傳輸的加密領域佔有相當的分量。據說RC6是同一幫人研究出來的,不過它和RC4沒太大關係呵。它是AES方案徵集時的候選算法之一,但是沒有Rijndael算法那麼幸運。RC6據說可以抵抗所有已知的攻擊,並能夠提供AES所要求的安全性,它也是相當優秀的一種可逆加密算法。不過當初它爲什麼沒能當選爲AES算法就不得而知了,不知道當時有沒有給評委們足夠的商務費用呵。
下載RC6.RAR

TEA---它是一種分組加密算法,也是可逆算法。短小精悍。它的實現非常簡單,超不過10行代碼。TEA算法每一次可以操作64位(8字節),採用128位(16字節)作爲密鑰,算法採用迭代的形式,儘管32輪迭代已經足夠了,但是最好的迭代輪數是64輪。數據流加密可能比較適合,因爲據說早期的QQ採用過TEA加密算法。
下載TEA.RAR

RSA---頂頂有名的非對稱公鑰加密算法,也許你可能不熟悉,不過網銀總應該用過吧,多數都是RSA算法來認證的。1977年就開發出來了,DES時代的東東了。不過用到現在依然堅挺,可見加密強度有多高。呵呵,不過它防解密的原理也很簡單:只告訴你兩個數相乘後的結果,你能知道原來的兩個數是什麼嗎?RSA的安全性依賴於大數的因子分解,但是並沒有理論上可以證明破譯RSA的難度與大數分解難度是同樣的。它是第一個既能用於數據加密也能用於數字簽名的算法,也是可逆算法。不過,在不告訴你密鑰的情況下,你就是想什麼辦法加密後的數據也還原不回去,銀行系統用它自有道理呵。告訴你個小祕密,前面說過的RC6好像就是有RSA開發組成員參與搞出來的。不過,RSA也有不少缺點。它受到素數產生技術的限制,產生密鑰時很麻煩;出於安全性考慮,分組長度至少也要600位以上,運算代價很高、速度比較慢,比DES之類的對稱算法要慢的多。它最大的缺點是需要生成大素數及大數取模時可能會產生特別大的數據量,這些都很耗費時間,生成複雜密鑰時在單片機上運行可能都不止10分鐘,所以解密時還是儘量讓PC或服務器來做吧。
下載RSA.RAR

MD5---非常著名的哈希算法,不可逆算法。網站登錄、操作系統的用戶認證、文件完整性和數字簽名等領域廣泛應用。不可逆算法一般做的都比較絕,例如彩虹加密狗,只告訴你一個餘數,你能知道原來的除數和被除數嗎?只把運算過的數據相比較,而不非得知道原數據,這樣就完成了認證過程。要想破解MD5的密碼,即使採用現在最快的巨型計算機,據說也要運算100萬年以上。不過,加密和解密都是數學領域的競賽,每一種加密算法都或多或少的存在漏洞或缺陷,MD5看上去真那麼牢不可破嗎?和MD5同樣有名的是山東大學的王小云教授。在2004年的國際密碼大會上王小云宣佈了她的研究小組完成了對MD5雜湊函數的雜湊衝撞,也就是從理論上說使用MD5的數字簽名可以僞造。這也意味着MD5可能需要和其他加密算法共用纔可以保證數字簽名的安全。不過,說MD5已被破解,那也有些杞人憂天了。可以肯定的告訴你,網絡上所有針對MD5提供的破解服務,全部都是查詢用字典法暴力破解後的數據包,沒有一個是真正僞造出來的數字簽名,那些號稱有幾百億條的記錄對MD5龐大算法來說太小了。試想想,動用美國軍方的巨型計算機,利用王小云研究理論,來破解我們的一個單片機或網站認證程序?沒必要吧。所以MD5依然可用呵,只不過再加上3DES、AES或SHA來防止字典就更好了。
下載MD5.RAR

SHA---著名的哈希算法,不可逆算法。也是多用在數字簽名上。SHA-1和MD5一樣,也被王小云教授找出雜湊衝撞的漏洞,不過也是停留在理論上的。SHA-256是很NB的,它光密鑰就有64個long,恐怕想要破解已經是天文數字了。最NB的是SHA-512,咱們這裏沒有收錄,這裏恐怕還沒有人能用得上。
下載SHA-1.RAR
下載SHA-256.RAR

好了,先介紹到這裏,一字一字的打真不容易呵。以上所有的程序均爲C源程序,不用其他文件,裏面都附帶了測試程序,在KEIL 4.21上跑過仿真,放心使用。程序大多不是我自己編的,有C++的源程改的,也有別人的C源程。爲了尊重別人的勞動成果,裏面會帶有人家的名字。我只是做了整理和調試。
例如TEA的測試程序:
void TEA_Test(void)
{
        unsigned char dat[16]="0123456789ABCDEF";
        unsigned char TEA_key[16];
        memcpy(TEA_key,"0123456789abcdef",16);//做運算之前先要設置好密鑰,這裏只是設置密鑰的DEMO。

        TEA_Encrypt(dat,TEA_key);      //TEA加密,數組dat裏面的新內容就是加密後的數據。
        TEA_Decrpyt(dat,TEA_key);      //密文數據存放在dat裏面,經TEA解密就能得到之前的明文。
}

DES的測試程序:
void DES3_Test(void)
{
        unsigned char in_buf[8] = "ABCDEFGH";
        unsigned char miwen[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
        unsigned char out_buf[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

        memcpy(DES_key,"0123456789abcdef",16);//3DES的密鑰是128位的,這裏只是設置密鑰的DEMO。
        
        DEC3_Encrypt(in_buf,miwen);     //3DES加密
        DEC3_Decrypt(miwen,out_buf);  //3DES解密
}

不用管其他程序是怎麼完成的,會用C語言的都能看懂吧。有興趣和有時間可以研究一下運算程序,深入瞭解一下加密方法。

測試方法與過程:
DES算法和AES算法都有現成的加密軟件,把軟仿真計算過的數據和人家的軟件做對比,並能解密還原爲原數據。
RC6、TEA、SHA-256暫時沒有找到測試軟件,通過不同的密鑰看到加密後的數據被完全打散或變形,並能還原爲原數據(SHA-256除外)。
RSA也沒找到測試軟件相對比。實際測試不太複雜的數據加解密數據正常,太複雜的數據用軟仿真半小時後解密未果。
MD5和SHA-1算法也有現成的加密軟件,自已計算的數據和人家算過的數據做對比,數據準確。

好了,就說這麼多吧。打包下載
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章