




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
實驗6B用JAVA語言實現(xiàn)不同模式的AES加解密一、實驗?zāi)康模?)熟練掌握J(rèn)AVA的Cryptography架構(gòu)。(2)掌握對稱加密算法的ECB、CBC和CTR使用模式。(3)了解WiFi和移動通信使用的密碼算法。二、實驗準(zhǔn)備(1)Java的Cryptography架構(gòu)是一個提供訪問和開發(fā)密碼功能的框架,它提供了許多cryptographic服務(wù)。因為歷史原因,CryptographyAPI位于java.security(Signature,MessageDigest)和javax.crypto(Cipher,KeyAgreement)兩個獨立的包內(nèi),其中javax.crypto包中定義的密碼操作包括加密、密鑰生成與協(xié)商以及消息驗證碼。(2)對稱加密算法常用的使用模式有多種,如EBC模式、
CBC模式、CFB模式、OFB模式和計數(shù)器模式(CTR模式),大家普遍使用的Wi-Fi(WPA2)就是采用計數(shù)器加密的,其原理如下圖6-12所示,請讀者思考這種加密模式的好處。圖6-12對稱密碼CRT模式下的加解密示意圖三、實驗內(nèi)容(1)下面的程序是用Java語言實現(xiàn)的AES算法。該程序先將字符串“thisisatest”加密,然后用同樣的密鑰解密。分析調(diào)試該程序并回答實驗報告中的問題。packagennxx;importjava.security.Security;importjavax.crypto.Cipher;importjavax.crypto.KeyGenerator;importjavax.crypto.SecretKey;publicclassAAA{ publicstaticvoidmain(String[]args)throwsException { //KeyGenerator提供對稱密鑰生成器的功能,支持各種算法 KeyGeneratorkeygen; //SecretKey負(fù)責(zé)保存對稱密鑰
SecretKeydeskey; //Cipher負(fù)責(zé)完成加密或解密工作 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); //根據(jù)密鑰,對Cipher對象進(jìn)行初始化,ENCRYPT_MODE表示加密模式
c.init(Cipher.ENCRYPT_MODE,deskey); byte[]src=msg.getBytes(); //加密,結(jié)果保存進(jìn)enc byte[]enc=c.doFinal(src); System.out.println("密文是:"+newString(enc)); //根據(jù)密鑰,對Cipher對象進(jìn)行初始化,ENCRYPT_MODE表示加密模式 c.init(Cipher.DECRYPT_MODE,deskey); //解密,結(jié)果保存進(jìn)dec byte[]dec=c.doFinal(enc); System.out.println("解密后的結(jié)果是"+newString(dec)); }}(2)如下是CBC模式AES加、解密程序,分析調(diào)試該程序并回答實驗報告中的問題。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é)數(shù)組(默認(rèn)值為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,輪數(shù)分別為10、12和14(2)什么是NoPadding和PKCS5Padding填充?NoPadding,顧名思義,這個就是不填充,要求原始數(shù)據(jù)必須就是滿足分組要求的數(shù)據(jù),不滿足的時候,無法使用該模式。PKCS5Padding,PKCS7Padding的子集,塊大小固定為8字節(jié)。PKCS7Padding,假設(shè)數(shù)據(jù)長度需要填充n(n>0)個字節(jié)才對齊,那么填充n個字節(jié),每個字節(jié)都是n;如果數(shù)據(jù)本身就已經(jīng)對齊了,則填充一塊長度為塊大小的數(shù)據(jù),每個字節(jié)都是塊大小。因為加密算法的需求,明文字節(jié)必須按照block進(jìn)行填充對齊,才能方便進(jìn)行加密運算。(3)給出實驗內(nèi)容(1)和(2)的測試結(jié)果。實驗(1)實驗(2)實驗內(nèi)容(2)中Base64編碼是干什么用的?對應(yīng)的實驗內(nèi)容(1)中是如何處理編碼的?實驗內(nèi)容(2)中Base64編碼的作用:將非ASCII字符的數(shù)據(jù)轉(zhuǎn)換成ASCII字符。對應(yīng)的實驗內(nèi)容(1)中的處理:2.簡答題(1)CBC模式的AES加密中,初始化向量起什么作用?加密時,明文首先與初始化向量(IV)異或,然后將結(jié)果進(jìn)行塊加密,得到的輸出就是密文,同時本次的輸出密文作為下一個塊加密的IV進(jìn)行異或。,如下圖所示。說明WiFi使用計數(shù)器模式的AES進(jìn)行加解密的優(yōu)點。并行、一次一密、不傳遞誤差CTR(Counter,計數(shù)器模式)描述:計算器模式不常見,在CTR模式中,有?個?增的算?,這個算??密鑰加密之后的輸出和明?異或的結(jié)果得到密?,相當(dāng)于?次?密。這種加密?式簡單快速,安全可靠,?且可以并?加密,但是在計算器不能維持很長的情況下,密鑰只能使??次。優(yōu)點:并?、?次?密、不傳遞誤差。缺點:主動攻擊(改明?,后續(xù)內(nèi)容不影響,只要誤差不傳遞該缺點就存在)CCMP數(shù)據(jù)加密算法是基于高級加密標(biāo)準(zhǔn)AES的新一代加密算法。由于AES具有應(yīng)用范圍廣、等待時間短、相對容易隱藏、吞吐量高等優(yōu)點,能提供比RC4算法更高的加密強度,所以CCMP加密算法優(yōu)于WEP及TKIP算法,能夠更好的解決WLAN安全問題。2004年6月正式通過的802.11i標(biāo)準(zhǔn)規(guī)定任何RSN設(shè)備必須強制實現(xiàn)CCMP加密算法。802.11i采用了基于AES標(biāo)準(zhǔn)和計數(shù)器模式的協(xié)議。此協(xié)議稱為Counter-Mode/CBC-MACProtocol(CCMP),
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 股份制企業(yè)合同文書撰寫要點
- 科技創(chuàng)新園區(qū)建設(shè)投資合同
- 物聯(lián)網(wǎng)項目戰(zhàn)略合作協(xié)議
- 商業(yè)價格保密協(xié)議
- 醫(yī)院與社區(qū)健康服務(wù)合作協(xié)議書
- 農(nóng)業(yè)產(chǎn)業(yè)集群發(fā)展運營方案
- 委托中介出售房屋協(xié)議
- 綠化場地租賃合同
- 媒體廣告代理協(xié)議書
- 高端消費品設(shè)計合作協(xié)議
- 組長競選課件教學(xué)課件
- 《基于UTAUT2模型的虛擬學(xué)術(shù)社區(qū)用戶持續(xù)使用意愿影響因素研究》
- 2022年公務(wù)員多省聯(lián)考《申論》真題(遼寧A卷)及答案解析
- 消防設(shè)施操作員(初級)題庫與參考答案
- 北師大版四年級下冊數(shù)學(xué)第一單元測試卷帶答案
- 2024年山東省德州市中考道德與法治試題卷(含答案解析)
- (完整版)英語四級詞匯表
- 潮流嘻哈文化時尚活動策劃演示模板
- 廣東省2024年中考化學(xué)試卷【附參考答案】
- 水利水電工程單元工程施工質(zhì)量驗收評定表及填表說明
- 四級防火道路施工標(biāo)準(zhǔn)
評論
0/150
提交評論