版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
實驗6B用JAVA語言實現不同模式的AES加解密一、實驗目的(1)熟練掌握JAVA的Cryptography架構。(2)掌握對稱加密算法的ECB、CBC和CTR使用模式。(3)了解WiFi和移動通信使用的密碼算法。二、實驗準備(1)Java的Cryptography架構是一個提供訪問和開發(fā)密碼功能的框架,它提供了許多cryptographic服務。因為歷史原因,CryptographyAPI位于java.security(Signature,MessageDigest)和javax.crypto(Cipher,KeyAgreement)兩個獨立的包內,其中javax.crypto包中定義的密碼操作包括加密、密鑰生成與協(xié)商以及消息驗證碼。(2)對稱加密算法常用的使用模式有多種,如EBC模式、
CBC模式、CFB模式、OFB模式和計數器模式(CTR模式),大家普遍使用的Wi-Fi(WPA2)就是采用計數器加密的,其原理如下圖6-12所示,請讀者思考這種加密模式的好處。圖6-12對稱密碼CRT模式下的加解密示意圖三、實驗內容(1)下面的程序是用Java語言實現的AES算法。該程序先將字符串“thisisatest”加密,然后用同樣的密鑰解密。分析調試該程序并回答實驗報告中的問題。packagennxx;importjava.security.Security;importjavax.crypto.Cipher;importjavax.crypto.KeyGenerator;importjavax.crypto.SecretKey;publicclassAAA{ publicstaticvoidmain(String[]args)throwsException { //KeyGenerator提供對稱密鑰生成器的功能,支持各種算法 KeyGeneratorkeygen; //SecretKey負責保存對稱密鑰
SecretKeydeskey; //Cipher負責完成加密或解密工作 Cipherc; //Security.addProvider(newvider.SunJCE()) //實例化支持AES算法的密鑰生成器,算法名稱用AES keygen=KeyGenerator.getInstance("AES"); //生成密鑰
deskey=keygen.generateKey(); //生成Cipher對象,指定其支持AES算法
c=Cipher.getInstance("AES"); Stringmsg="Thisisatest"; System.out.println("明文是:"+msg); //根據密鑰,對Cipher對象進行初始化,ENCRYPT_MODE表示加密模式
c.init(Cipher.ENCRYPT_MODE,deskey); byte[]src=msg.getBytes(); //加密,結果保存進enc byte[]enc=c.doFinal(src); System.out.println("密文是:"+newString(enc)); //根據密鑰,對Cipher對象進行初始化,ENCRYPT_MODE表示加密模式 c.init(Cipher.DECRYPT_MODE,deskey); //解密,結果保存進dec byte[]dec=c.doFinal(enc); System.out.println("解密后的結果是"+newString(dec)); }}(2)如下是CBC模式AES加、解密程序,分析調試該程序并回答實驗報告中的問題。packagennxx;importjavax.crypto.Cipher;importjavax.crypto.spec.IvParameterSpec;importjavax.crypto.spec.SecretKeySpec;importjava.util.Base64;publicclassrc4{publicstaticStringencrypt(StringstrKey,StringstrIn)throwsException{ SecretKeySpecskeySpec=getKey(strKey); Ciphercipher=Cipher.getInstance("AES/CBC/PKCS5Padding"); IvParameterSpeciv=newIvParameterSpec("0102030405060708".getBytes()); cipher.init(Cipher.ENCRYPT_MODE,skeySpec,iv); byte[]encrypted=cipher.doFinal(strIn.getBytes()); //returnnewBASE64Encoder().encode(encrypted); Base64.Encoderbase64Encoder=Base64.getEncoder(); returnbase64Encoder.encodeToString(encrypted); }publicstaticStringdecrypt(StringstrKey,StringstrIn)throwsException{ SecretKeySpecskeySpec=getKey(strKey); Ciphercipher=Cipher.getInstance("AES/CBC/PKCS5Padding"); IvParameterSpeciv=newIvParameterSpec("0102030405060708".getBytes()); cipher.init(Cipher.DECRYPT_MODE,skeySpec,iv); //byte[]encrypted1=newBASE64Decoder().decodeBuffer(strIn); Base64.Decoderbase64Decoder=Base64.getDecoder(); byte[]encrypted1=base64Decoder.decode(strIn); byte[]original=cipher.doFinal(encrypted1); StringoriginalString=newString(original); returnoriginalString;}privatestaticSecretKeySpecgetKey(StringstrKey)throwsException{ byte[]arrBTmp=strKey.getBytes(); byte[]arrB=newbyte[16];//創(chuàng)建一個空的16位字節(jié)數組(默認值為0) for(inti=0;i<arrBTmp.length&&i<arrB.length;i++) { arrB[i]=arrBTmp[i]; } SecretKeySpecskeySpec=newSecretKeySpec(arrB,"AES"); returnskeySpec;}publicstaticvoidmain(String[]args)throwsException{ StringCode="中文ABc123"; Stringkey="1q2w3e4r"; StringcodE; codE=rc4.encrypt(key,Code); System.out.println("原文:"+Code); System.out.println("密鑰:"+key); System.out.println("密文:"+codE); System.out.println("解密:"+rc4.decrypt(key,codE));}}四、實驗報告1.通過實驗回答下列問題(1)AES算法中密鑰長度為多長?三種可選密鑰長度128bit,192bit和256bit,輪數分別為10、12和14(2)什么是NoPadding和PKCS5Padding填充?NoPadding,顧名思義,這個就是不填充,要求原始數據必須就是滿足分組要求的數據,不滿足的時候,無法使用該模式。PKCS5Padding,PKCS7Padding的子集,塊大小固定為8字節(jié)。PKCS7Padding,假設數據長度需要填充n(n>0)個字節(jié)才對齊,那么填充n個字節(jié),每個字節(jié)都是n;如果數據本身就已經對齊了,則填充一塊長度為塊大小的數據,每個字節(jié)都是塊大小。因為加密算法的需求,明文字節(jié)必須按照block進行填充對齊,才能方便進行加密運算。(3)給出實驗內容(1)和(2)的測試結果。實驗(1)實驗(2)實驗內容(2)中Base64編碼是干什么用的?對應的實驗內容(1)中是如何處理編碼的?實驗內容(2)中Base64編碼的作用:將非ASCII字符的數據轉換成ASCII字符。對應的實驗內容(1)中的處理:2.簡答題(1)CBC模式的AES加密中,初始化向量起什么作用?加密時,明文首先與初始化向量(IV)異或,然后將結果進行塊加密,得到的輸出就是密文,同時本次的輸出密文作為下一個塊加密的IV進行異或。,如下圖所示。說明WiFi使用計數器模式的AES進行加解密的優(yōu)點。并行、一次一密、不傳遞誤差CTR(Counter,計數器模式)描述:計算器模式不常見,在CTR模式中,有?個?增的算?,這個算??密鑰加密之后的輸出和明?異或的結果得到密?,相當于?次?密。這種加密?式簡單快速,安全可靠,?且可以并?加密,但是在計算器不能維持很長的情況下,密鑰只能使??次。優(yōu)點:并?、?次?密、不傳遞誤差。缺點:主動攻擊(改明?,后續(xù)內容不影響,只要誤差不傳遞該缺點就存在)CCMP數據加密算法是基于高級加密標準AES的新一代加密算法。由于AES具有應用范圍廣、等待時間短、相對容易隱藏、吞吐量高等優(yōu)點,能提供比RC4算法更高的加密強度,所以CCMP加密算法優(yōu)于WEP及TKIP算法,能夠更好的解決WLAN安全問題。2004年6月正式通過的802.11i標準規(guī)定任何RSN設備必須強制實現CCMP加密算法。802.11i采用了基于AES標準和計數器模式的協(xié)議。此協(xié)議稱為Counter-Mode/CBC-MACProtocol(CCMP),
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論