資源描述:
《aes加密算法》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、數(shù)學(xué)與計(jì)算機(jī)學(xué)院密碼學(xué)實(shí)驗(yàn)報(bào)告年級2009級學(xué)號2009432133姓名王祥輝成績專業(yè)網(wǎng)絡(luò)工程實(shí)驗(yàn)地點(diǎn)主樓502指導(dǎo)教師常卓實(shí)驗(yàn)項(xiàng)目AES加密算法實(shí)驗(yàn)日期2012年9月24日一、實(shí)驗(yàn)?zāi)康?、理解AES加密與解密的程序設(shè)計(jì)算法思想2、編寫AES加密與解密程序,實(shí)現(xiàn)對明文的加密與解密,加深對數(shù)據(jù)加密與解密的理解,掌握AES加密算法思想,提高網(wǎng)絡(luò)安全的編程能力。二、實(shí)驗(yàn)原理Rijndael算法設(shè)計(jì)采用針對差分和線性密碼分析提出的寬軌跡策略(WTS),其最大優(yōu)勢是可以給出算法最佳差分特征的概率以及最佳線性逼近偏差的界;使用簡單的部件組織成清晰的結(jié)構(gòu),便于算法安全性的分析。當(dāng)然,在
2、密碼學(xué)界永遠(yuǎn)沒有絕對的安全,Rijndael算法也不例外,如其明顯的代數(shù)結(jié)構(gòu)對安全性的潛在威脅已經(jīng)受到一些學(xué)者的質(zhì)疑。最有名的當(dāng)數(shù)密碼設(shè)計(jì)者自己提出的Square攻擊,其主要思想是利用第4輪字節(jié)替換前后平衡性的改變來猜測密鑰字節(jié),對128比特密鑰下4到6輪簡化算法有效。Biham[2]等對Square攻擊進(jìn)行改進(jìn),時(shí)間復(fù)雜度降為原來的一半,并認(rèn)為顛倒輪密鑰的順序可將攻擊復(fù)雜度降低28。Lucks[3]利用密鑰生成算法的弱點(diǎn),將Square攻擊的密鑰長度擴(kuò)展到192和256比特,攻擊7輪簡化算法比窮盡搜索快。Ferguson[4]利用“部分和”技術(shù)將6輪Square攻擊的復(fù)
3、雜度從272降到244,并推廣到7輪和8輪簡化算法,指出密鑰生成算法中幾個(gè)違背設(shè)計(jì)準(zhǔn)則的特性,利用慢擴(kuò)散性設(shè)計(jì)了一個(gè)針對256比特密鑰下9輪簡化算法的密鑰相關(guān)攻擊方案。密碼代數(shù)結(jié)構(gòu)的任何弱點(diǎn)都將有利于密碼的分析和破譯。因此,在對Rijndael簡化算法進(jìn)行攻擊嘗試的同時(shí),人們也把相當(dāng)多的精力集中到算法內(nèi)部結(jié)構(gòu)各種性質(zhì)的研究上。Ferguson[8]給出了Rijndael算法一個(gè)直觀而緊湊的代數(shù)表示形式;Filiol[9]則將算法的每一輸出比特看作以明文比特和密鑰比特為變量的布爾函數(shù)),,,,,('11nnikkppfLL,用Mōbius變換將之計(jì)算出來,研究其低次項(xiàng)的分布
4、情況,比較if與完全隨機(jī)的布爾函數(shù)代數(shù)正規(guī)式的差異。三、實(shí)驗(yàn)要求編寫AES加密解密算法,并測試四、實(shí)驗(yàn)步驟、結(jié)果(程序+注釋+截圖)及分析//AES.h#ifndefAES_H_#defineAES_H_#include#includeusingnamespacestd;classAES{public:typedefunsignedcharbyte;staticconstintKEY_SIZE=16;//密鑰長度為位staticconstintN_ROUND=11;byteplainText[16];//明文bytestate[16];/
5、/當(dāng)前分組。bytecipherKey[16];//密鑰byteroundKey[N_ROUND][16];//輪密鑰bytecipherText[16];//密文byteSBox[16][16];//S盒byteInvSBox[16][16];//逆S盒voidEncryptionProcess();voidDecryptionProcess();voidRound(constint&round);voidInvRound(constint&round);voidFinalRound();voidInvFinalRound();voidKeyExpansion();vo
6、idAddRoundKey(constint&round);voidSubBytes();voidInvSubBytes();voidShiftRows();voidInvShiftRows();voidMixColumns();voidInvMixColumns();voidBuildSBox();voidBuildInvSBox();voidInitialState(constbyte*text);voidInitialCipherText();voidInitialplainText();byteGFMultplyByte(constbyte&left,constb
7、yte&right);constbyte*GFMultplyBytesMatrix(constbyte*left,constbyte*right);public:AES();constbyte*Cipher(constbyte*text,constbyte*key,constint&keySize);constbyte*InvCipher(constbyte*text,constbyte*key,constint&keySize);};voidAES::EncryptionProcess(){//加密過程InitialStat