AES加解密的JAVA實現(xiàn)_第1頁
AES加解密的JAVA實現(xiàn)_第2頁
AES加解密的JAVA實現(xiàn)_第3頁
AES加解密的JAVA實現(xiàn)_第4頁
AES加解密的JAVA實現(xiàn)_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

一、實驗?zāi)康?、深入理解AES加解密算法;2、用JAVA編程完成一個明文分組的加密和解密,其中密鑰是十六進(jìn)制,長度為128比特(32個16進(jìn)制數(shù)),并且進(jìn)行加密后,能夠進(jìn)行正確的解密。二、實驗條件1、熟悉JAVA開發(fā)環(huán)境,能熟練運用JAVA進(jìn)行程序編寫;2、掌握AES加解密算法知識,了解其算法原理;3、安裝了JAVA環(huán)境的計算機(jī)。三、實驗背景隨著對稱密碼的發(fā)展,3DES用軟件實現(xiàn)速度相對較慢,它使用的64位分組長度顯得不夠高效和安全的缺點使得需要一種新的高級加密標(biāo)準(zhǔn)來替代它。AES的全稱是AdvancedEncryptionStandard,即高級加密標(biāo)準(zhǔn)。該項目由美國國家標(biāo)準(zhǔn)技術(shù)研究所(NIST)于1997年開始啟動并征集算法,在2000年確定采用Rijndael作為其最終算法,并于2001年被美國商務(wù)部部長批準(zhǔn)為新的聯(lián)邦信息加密標(biāo)準(zhǔn)(FIPSPUB197),該標(biāo)準(zhǔn)的正式生效日期是2002年5月26日。2000年10月2日,NIST對Rijndael做出了最終評估。AES是一個迭代的、對稱密鑰分組的密碼,它可以使用128、192和256位密鑰,并且用128位(16字節(jié))分組加密和解密數(shù)據(jù)。與公共密鑰密碼使用密鑰對不同,對稱密鑰密碼使用相同的密鑰加密和解密數(shù)據(jù)。通過分組密碼返回的加密數(shù)據(jù)的位數(shù)與輸入數(shù)據(jù)相同。迭代加密使用一個循環(huán)結(jié)構(gòu),在該循環(huán)中重復(fù)置換(permutations)和替換(substitutions)輸入數(shù)據(jù)。四、實驗原理1、AES加密模塊字節(jié)替代:通過一個非線性的替換函數(shù),用查找表的方式把每個字節(jié)替換成對應(yīng)的字節(jié);行移位:將矩陣中的每個橫列進(jìn)行循環(huán)式移位;列混合:為了充分混合矩陣中各個直行的操作,這個步驟使用線性轉(zhuǎn)換來混合每行內(nèi)的四個字節(jié);輪密鑰加:矩陣中的每一個自己都與該次循環(huán)的子密鑰做XOR邏輯運算;每個子密鑰有密鑰生成方案產(chǎn)生;最后一個加密循環(huán)中省略列混合步驟,而以另一個輪密鑰加取代。2、AES解密模塊:逆行移位:與行移位操作相反;逆字節(jié)替代:與字節(jié)替代一樣,只是查表操作變?yōu)槟鍿盒;輪密鑰加:與加密算法中一樣;逆列混合:與列混合操作一樣,只是多項式不同;最后一個解密循環(huán)中省略逆列混合步驟,以另一個輪密鑰加取代。3、AES密鑰擴(kuò)展模塊首先初始密鑰按照矩陣列進(jìn)行分組,前4列初始密鑰記為K0,K1,K2,K3,那么新的列Ki遞歸如下:1)如果Ki中,i不是4的倍數(shù),那么i列由如下等式確定:Ki=K(i-4)XORK(i-1)2)如果ki中,i是4的倍數(shù),那么i列由如下等式確定:Ki=K(i-4)XORT[K(i-1)]其中是4的倍數(shù)的轉(zhuǎn)換形式,按以下方式實現(xiàn):a將K(i-1)循環(huán)左移位,每次一個字節(jié),如abcd變成bcda;b將這4個字節(jié)作為S盒的輸入,輸出新的4個字節(jié)efgh;c計算一輪的常量r(i)=2(i-4)/4;d這樣生成轉(zhuǎn)換后的列:[eXORr(i),f,g,h]。第i輪的輪密鑰組成了列K4i,K(4i+1),K(4i+2),K(4i+3)。五、程序設(shè)計1、程序開發(fā)平臺及工具平臺:windowsxp軟件版本:jdk1.6.0_212、源代碼importjavax.crypto.Cipher;importjavax.crypto.KeyGenerator;importjavax.crypto.SecretKey;importjavax.crypto.spec.SecretKeySpec;publicclassAES{privatefinalstaticStringalgorithm="AES";privatestaticStringasHex(bytebuf[]){StringBufferstrbuf=newStringBuffer(buf.length*2);for(inti=0;i<buf.length;i++){if(((int)buf[i]&0xff)<0x10)strbuf.append("0");strbuf.append(Long.toString((int)buf[i]&0xff,16));}returnstrbuf.toString();}privatestaticbyte[]asBin(Stringsrc){if(src.length()<1)returnnull;byte[]encrypted=newbyte[src.length()/2];for(inti=0;i<src.length()/2;i++){inthigh=Integer.parseInt(src.substring(i*2,i*2+1),16);intlow=Integer.parseInt(src.substring(i*2+1,i*2+2),16);encrypted[i]=(byte)(high*16+low);}returnencrypted;}publicstaticStringgetRawKey(){try{KeyGeneratorkgen=KeyGenerator.getInstance(algorithm);kgen.init(128);//192and256bitsmaynotbeavailableSecretKeyskey=kgen.generateKey();//Generatethesecretkeyspecs.byte[]raw=skey.getEncoded();returnasHex(raw);}catch(Exceptione){return"";}}publicstaticStringgetEncrypt(Stringmessage,StringrawKey){byte[]key=asBin(rawKey);try{SecretKeySpecskeySpec=newSecretKeySpec(key,algorithm);Ciphercipher=Cipher.getInstance(algorithm);cipher.init(Cipher.ENCRYPT_MODE,skeySpec);byte[]encrypted=cipher.doFinal(message.getBytes());returnasHex(encrypted);}catch(Exceptione){return"";}}publicstaticStringgetDecrypt(Stringencrypted,StringrawKey){byte[]tmp=asBin(encrypted);byte[]key=asBin(rawKey);try{SecretKeySpecskeySpec=newSecretKeySpec(key,algorithm);Ciphercipher=Cipher.getInstance(algorithm);cipher.init(Cipher.DECRYPT_MODE,skeySpec);byte[]decrypted=cipher.doFinal(tmp);returnnewString(decrypted);}catch(Exceptione){return"";}}publicstaticvoidmain(String[]args)throwsException{Stringmessage="whatareyoudoing?";StringrawKey=getRawKey();System.out.println("Key="+rawKey);Stringencrypted=getEncrypt(message,rawKey);System.out.println("orgtext="+message);System.out.println("encrypted="+encrypted);Stringdecrypted=getDecrypt(encrypted,rawKey);System.out.println("decrypted="+decrypt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論