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