?
1.?????DES算法介紹:
DES?算法具有對稱性,?既可以用于加密又可以用于解密。對稱性帶來的一個很大的好處在于硬件實現, DES?的加密和解密可以用完全相同的硬件來實現。DES?算法的明文分組是64?位,?輸出密文也是64?位。所以密鑰的有效位數是56?位,?加上校驗位共64?位。總體流程如表1?所示:輸入的64?位明文,?先經初始IP?變換,?形成64?位數據,64?位數據被分為兩部分,?分別是L?部分和R?部分; L?和R?經過16?次迭代,?形成新的64?位;?新的64?位數據再經初始逆變換,?輸出64?位密文。初始置換和逆初始置換是簡單的移位操作。在迭代過程這一步驟,?替代是在密鑰控制下進行的,?而移位是按固定順序進行的,?它將數據分組作為一個單元來進行變換,?相繼使用替代法和移位法加密,從而具有增多替代和重新排列的功能。迭代過程是DES?加密算法的核心部分。
2.?????AES算法Rijndael介紹:
AES算法Rijndael?密碼是一個迭代型分組密碼,?其分組長度和密碼長度都是可變的,分組長度和密碼長度可以獨立的指定為128?比特,192?比特或者256?比特。AES?的加密算法的數據處理單位是字節,128?位的比特信息被分成16?個字節,?按順序復制到一個4×4?的矩陣中,?稱為狀態(state),AES?的所有變換都是基于狀態矩陣的變換。用Nr?表示對一個數據分組加密的輪數(加密輪數與密鑰長度的關系如表2?所示)?。在輪函數的每一輪迭代中,?包括4?步變換,?分別是字節代換運算(ByteSub())、行變換(ShiftRows())、列混合(MixColumns())以及輪密鑰的添加變換(AddRoundKey()),?其作用就是通過重復簡單的非線形變換、混合函數變換,?將字節代換運算產生的非線性擴散,?達到充分的混合,?在每輪迭代中引入不同的密鑰,?從而實現加密的有效性
3.????DES與AES算法比較:
自DES算法1977年首次公諸于世以來,學術界對其進行了深入的研究,圍繞它的安全性等方面展開了激烈的爭論。在技術上,對DES的批評主要集中在以下幾個方面:
( 1)?作為分組密碼,DES的加密單位僅有64位二進制,這對于數據傳輸來說太小,因為每個分組僅含8個字符,而且其中某些位還要用于奇偶校驗或其他通訊開銷。
( 2) DES的密鑰的位數太短,只有56比特,而且各次迭代中使用的密鑰是遞推產生的,這種相關必然降低密碼體制的安全性,?在現有技術下用窮舉法尋找密鑰已趨于可行。
(3) DES不能對抗差分和線性密碼分析。迄今為止, DES算法中的S盒8個選擇函數矩陣的設計原理因美國政府方面的干預,?不予公布。從這一方面嚴格地講DES算法并不是一個真正的公開加密算法。。
( 4) DES用戶實際使用的密鑰長度為56bit,?理論上最大加密強度為256。DES算法要提高加密強度(例如增加密鑰長度),?則系統開銷呈指數增長。除采用提高硬件功能和增加并行處理功能外,從算法本身和軟件技術方面無法提高DES算法的加密強度。
相對DES算法來說,AES算法無疑解決了上述問題,主要表現在如下幾方面:
( 1)?運算速度快,在有反饋模式、無反饋模式的軟硬件中,Rijndael都表現出非常好的性能。
( 2)?對內存的需求非常低,適合于受限環境。
( 3) Rijndael是一個分組迭代密碼,分組長度和密鑰長度設計靈活。
( 4) AES標準支持可變分組長度,分組長度可設定為32比特的任意倍數,最小值為128比特,最大值為256比特。
( 5) AES的密鑰長度比DES大,它也可設定為32比特的任意倍數,最小值為128比特,最大值為256比特,?所以用窮舉法是不可能破解的。在可預計的將來,如果計算機的運行速度沒有根本性的提高,用窮舉法破解AES密鑰幾乎不可能。
( 6) AES算法的設計策略是寬軌跡策略(Wide Trail Strategy, WTS)。WTS是針對差分分析和線性分析提出的,可對抗差分密碼分析和線性密碼分析。總之,Rijndael算法匯聚了安全性、效率高、易實現性和靈活性等優點,是一種較DES更好的算法。
4.?????TEA:
TEA(Tiny Encryption Algorithm)?是一種簡單高效的加密算法,以加密解密速度快,實現簡單著稱。算法真的很簡單,TEA算法每一次可以操作64-bit(8-byte),采用128-bit(16-byte)作為key,算法采用迭代的形式,推薦的迭代輪數是64輪,最少32輪。目前我只知道QQ一直用的是16輪TEA。沒什么好說的,先給出C語言的源代碼(默認是32輪):
?1?void?encrypt(unsigned?long?*v,?unsigned?long?*k)?{
?2?????unsigned?long?y=v[0],?z=v[1],?sum=0,?i;?????????/*?set?up?*/
?3?????unsigned?long?delta=0x9e3779b9;?????????????????/*?a?key?schedule?constant?*/
?4?????unsigned?long?a=k[0],?b=k[1],?c=k[2],?d=k[3];???/*?cache?key?*/
?5?????for?(i=0;?i?32;?i++)?{????????????????????????/*?basic?cycle?start?*/
?6?????????sum?+=?delta;
?7?????????y?+=?((z<<4)?+?a)?^?(z?+?sum)?^?((z>>5)?+?b);
?8?????????z?+=?((y<<4)?+?c)?^?(y?+?sum)?^?((y>>5)?+?d);/*?end?cycle?*/
?9?????}
10?????v[0]=y;
11?????v[1]=z;
12?}
13?
14?void?decrypt(unsigned?long?*v,?unsigned?long?*k)?{
15?????unsigned?long?y=v[0],?z=v[1],?sum=0xC6EF3720,?i;?/*?set?up?*/
16?????unsigned?long?delta=0x9e3779b9;??????????????????/*?a?key?schedule?constant?*/
17?????unsigned?long?a=k[0],?b=k[1],?c=k[2],?d=k[3];????/*?cache?key?*/
18?????for(i=0;?i<32;?i++)?{????????????????????????????/*?basic?cycle?start?*/
19?????????z?-=?((y<<4)?+?c)?^?(y?+?sum)?^?((y>>5)?+?d);
20?????????y?-=?((z<<4)?+?a)?^?(z?+?sum)?^?((z>>5)?+?b);
21?????????sum?-=?delta;????????????????????????????????/*?end?cycle?*/
22?????}
23?????v[0]=y;
24?????v[1]=z;
25?}
評論
查看更多