




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
網(wǎng)絡(luò)安全實驗報告 姓名: 白晨 班級: 軟件22指導(dǎo)老師: 田暄提交日期: 2015-12-10目錄1 加解密與認證 21.1 實驗環(huán)境 21.2 源代碼與注釋 21.3 運行結(jié)果與分析 72 RC4流密碼加密實現(xiàn) 82.1 實驗環(huán)境 82.2 源代碼與注釋 82.3 運行結(jié)果與分析 103 大于3人實現(xiàn)證書生成、簽發(fā)、通信 113.1 實驗環(huán)境 113.2 實驗過程與分析 11
加解密與認證要求:結(jié)合所提供密碼學(xué)開發(fā)庫或利用Java,vc自帶密碼學(xué)開發(fā)庫完成如下要求1)設(shè)計實現(xiàn)消息的機密性,完整性與可鑒別,認證要求。2)報告中要有思路分析,設(shè)計流程與關(guān)鍵代碼。每步變換后的結(jié)果3)要求結(jié)合個人信息進行,如消息中應(yīng)包含個人學(xué)號,姓名等4)應(yīng)使用到消息分組,不能太短實驗環(huán)境語言 :JavaIDE :Eclipse綠色版源代碼與注釋importjava.security.InvalidKeyException;importjava.security.KeyPair;importjava.security.KeyPairGenerator;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;importjava.security.PrivateKey;importjava.security.PublicKey;importjava.security.SecureRandom;importjava.security.Signature;importjava.security.SignatureException;importjavax.crypto.BadPaddingException;importjavax.crypto.Cipher;importjavax.crypto.IllegalBlockSizeException;importjavax.crypto.KeyGenerator;importjavax.crypto.NoSuchPaddingException;importjavax.crypto.SecretKey;publicclassEncryptionAndDecryption{ privatestaticfinalintGROUP_SIZE=128; privatestaticfinalintGROUP_MSG_SIZE=28; //28bytespergroup privatestaticfinalintGROUP_HEAD_SIZE=24; privatestaticfinalintDIGEST_SIZE=20; privatestaticfinalintOFFSET_GROUP_SIZE=20; privatestaticfinalintOFFSET_CUR_GROUP=22; privatestaticfinalintOFFSET_MSG_START=24; privatestaticfinalintOFFSET_SIGN_SIZE=77; privatestaticfinalintOFFSET_SIGN_START=78; //Storeplaintext /*Attributes***********************************************/ privateStringmMsg; privatebyte[][]mCipers; privateMessageDigestmMsgDigest; privateKeyPairGeneratormKeyPairGenerator; privatePublicKeymPublicKey; privatePrivateKeymPrivateKey; privateSignaturemSignature; privateKeyGeneratormKeyGenerator; privateSecretKeymDesKey; privateCiphermCipher;/*EncryptionandDecryption*************************************/ publicEncryptionAndDecryption(){ try{ mMsgDigest=MessageDigest.getInstance("SHA-1");//UseSHA-1togetMsgdigest mKeyPairGenerator=KeyPairGenerator.getInstance("DSA");//SignatureAlgorithmisDSA SecureRandomsecrand=newSecureRandom(); //Random secrand.setSeed("BC".getBytes()); //Usebytesoftexttogenerateaseed mKeyPairGenerator.initialize(512,secrand); //Generatethekeypair KeyPairkeys=mKeyPairGenerator.generateKeyPair(); //Getkeys mPublicKey=keys.getPublic(); //Kpu mPrivateKey=keys.getPrivate(); //Kpr mSignature=Signature.getInstance("DSA"); mKeyGenerator=KeyGenerator.getInstance("DES"); //EncryptionAlgorithm mDesKey=mKeyGenerator.generateKey(); //DesKey mCipher=Cipher.getInstance("DES"); //Cipher }catch(NoSuchAlgorithmExceptione){ e.printStackTrace(); }catch(NoSuchPaddingExceptione){ e.printStackTrace(); } }/** *Splitthemessageintogroup(28bytespergroup) *@returnthemessagegroups */ privatebyte[][]splitMsg(){ finalintgroupSize=(mMsg.length()*2+1)/GROUP_MSG_SIZE+1; // System.out.println(groupSize); // System.out.println(mMsg.length()); byte[][]msgs=newbyte[groupSize][GROUP_MSG_SIZE]; byte[]msgBytes=mMsg.getBytes(); //System.out.println(msgBytes.length); for(inti=0;i<groupSize;i++){ for(intj=0;(j<GROUP_MSG_SIZE)&&(i*GROUP_MSG_SIZE+j<msgBytes.length);j++){ msgs[i][j]=msgBytes[i*GROUP_MSG_SIZE+j]; } } returnmsgs; }/** *Encryption *@returnCipher */ publicbyte[][]encrypt(){ //Splittheplaintextintogroup byte[][]plains=splitMsg(); //Plaintextgroup //System.out.println(plains.length); //System.out.println(mMsg.length()); print(plains); byte[][]groups=newbyte[plains.length][GROUP_SIZE]; //Messagebeforeencryption byte[][]ciphers=newbyte[plains.length][]; //Messageafterencryption //Encryptthegroups for(inti=0;i<groups.length;i++){ //Msgdigest mMsgDigest.update(plains[i].clone()); byte[]digest=mMsgDigest.digest(); //Signthemessage byte[]signs=newbyte[0]; try{ mSignature.initSign(mPrivateKey); mSignature.update(digest); signs=mSignature.sign(); }catch(SignatureExceptione){ e.printStackTrace(); }catch(InvalidKeyExceptione){ e.printStackTrace(); } //Filldigest for(intj=0;j<DIGEST_SIZE;j++){ groups[i][j]=digest[j]; } //Fillsignatureinformation groups[i][OFFSET_SIGN_SIZE]=(byte)signs.length; for(ints=0;s<signs.length;s++){ groups[i][OFFSET_SIGN_START+s]=signs[s]; } //Filltheinformationofcurrentgroup byte[]groupSize=toByteArray(plains.length,2); groups[i][OFFSET_GROUP_SIZE]=groupSize[0]; groups[i][OFFSET_GROUP_SIZE+1]=groupSize[1]; byte[]curGroup=toByteArray(i,2); groups[i][OFFSET_CUR_GROUP]=curGroup[0]; groups[i][OFFSET_CUR_GROUP+1]=curGroup[1]; //Fillthemessage for(intm=0;m<GROUP_MSG_SIZE&&m<plains[i].length;m++){ groups[i][OFFSET_MSG_START+m]=plains[i][m]; } //Printgroupsdatum System.out.println(""); for(byte[]temp:groups) { for(bytet:temp) { System.out.print(t+""); } System.out.println(); } //Encryptthemessage try{ mCipher.init(Cipher.ENCRYPT_MODE,mDesKey); ciphers[i]=mCipher.doFinal(groups[i]); }catch(IllegalBlockSizeExceptione){ e.printStackTrace(); }catch(BadPaddingExceptione){ e.printStackTrace(); }catch(InvalidKeyExceptione){ e.printStackTrace(); } } returnciphers; } privatebyte[]toByteArray(intvalue,inti){ //TODOAuto-generatedmethodstub byte[]b=newbyte[i]; b[1]=(byte)((value>>8)&0xFF); b[0]=(byte)(value&0xFF); returnb;} publicvoidsetMsg(Stringmsg){ mMsg=msg; } publicvoidsetCiphers(byte[][]ciphers){ mCipers=ciphers; }publicbyte[][]decrypt(){ byte[][]plains=newbyte[mCipers.length][GROUP_MSG_SIZE]; byte[][]groups=newbyte[mCipers.length][GROUP_SIZE]; for(inti=0;i<mCipers.length;i++){ //Decrytthemessagegroup byte[]plain=newbyte[GROUP_SIZE]; try{ mCipher.init(Cipher.DECRYPT_MODE,mDesKey); plain=mCipher.doFinal(mCipers[i]); }catch(InvalidKeyExceptione){ e.printStackTrace(); }catch(IllegalBlockSizeExceptione){ e.printStackTrace(); }catch(BadPaddingExceptione){ e.printStackTrace(); } //Verifythesignature byte[]signs=newbyte[plain[OFFSET_SIGN_SIZE]]; byte[]digest=newbyte[DIGEST_SIZE]; //Retrievethedigest for(intd=0;d<DIGEST_SIZE;d++){ digest[d]=plain[d]; } //Retrievethesigns for(ints=0;s<signs.length;s++){ signs[s]=plain[OFFSET_SIGN_START+s]; } try{ mSignature.initVerify(mPublicKey); mSignature.update(digest); if(mSignature.verify(signs)){ //Verifytheintegrity mMsgDigest.update(plain,OFFSET_MSG_START,GROUP_MSG_SIZE); if(MessageDigest.isEqual(digest,mMsgDigest.digest())){ //Getcurrentgroupoffset byte[]curGroup=newbyte[2]; curGroup[0]=plain[OFFSET_CUR_GROUP]; curGroup[1]=plain[OFFSET_CUR_GROUP+1]; intcurPos=toInt(curGroup); for(intj=0;j<GROUP_MSG_SIZE;j++){ plains[curPos][j]=plain[OFFSET_MSG_START+j]; } } }; }catch(SignatureExceptione){ e.printStackTrace(); }catch(InvalidKeyExceptione){ e.printStackTrace(); } } returnplains; } publicstaticvoidprint(byteplains[][]){ byte[]b=newbyte[(plains.length-1)*GROUP_MSG_SIZE+plains[plains.length-1].length]; intj=0; intk=0; for(inti=0;i<b.length;i++){ b[i]=plains[k][j]; j++; if(j==plains[0].length){ k++; j=0; } } System.out.println(newString(b)); } publicinttoInt(byte[]b){ intvalue; value=(int)((b[0]&0xFF) |((b[1]&0xFF)>>8) ); returnvalue; } publicstaticvoidmain(String[]args){ EncryptionAndDecryptiontest=newEncryptionAndDecryption(); test.setMsg("白晨-2121601027-軟件學(xué)院-軟件22-網(wǎng)安實驗-加密與解密"); test.setCiphers(test.encrypt()); print(test.decrypt()); }}運行結(jié)果與分析實驗所用加密算法為DES,簽名算法為:DSA,消息摘要的生成用的為SHA-1,分組為28字節(jié)一組,內(nèi)容結(jié)構(gòu)為:摘要+分組信息+消息+簽名長度+簽名由于加密是對每一組進行加密的。在組中先填充消息摘要等消息。所以可以看到第二段(第一次加密Group1結(jié)束)中在密文第一個字節(jié)(-56)前有一段消息摘要等其他消息。解密后生成摘要與簽名的摘要進行比對,沒有問題。
RC4流密碼加密實現(xiàn)實驗環(huán)境語言 :JavaIDE :Eclipse綠色版源代碼importjava.lang.Integer; classHomeWork{publicstaticStringMyRC4(StringaInput,StringaKey){int[]iS=newint[256]; byte[]iK=newbyte[256];for(inti=0;i<256;i++)iS[i]=i;intj=1;for(shorti=0;i<256;i++){iK[i]=(byte)aKey.charAt((i%aKey.length()));}j=0;for(inti=0;i<255;i++){j=(j+iS[i]+iK[i])%256;inttemp=iS[i];iS[i]=iS[j];iS[j]=temp;}inti=0;j=0;char[]iInputChar=aInput.toCharArray();char[]iOutputChar=newchar[iInputChar.length];for(shortx=0;x<iInputChar.length;x++){i=(i+1)%256;j=(j+iS[i])%256;inttemp=iS[i];iS[i]=iS[j];iS[j]=temp;intt=(iS[i]+(iS[j]%256))%256;intiY=iS[t];chariCY=(char)iY;iOutputChar[x]=(char)(iInputChar[x]^iCY);}returnnewString(iOutputChar);} publicstaticStringStrToBinstr(Stringstr){ char[]strChar=str.toCharArray(); Stringresult=""; for(inti=0;i<strChar.length;i++){ result+=Integer.toBinaryString(strChar[i])+""; }returnresult; } publicstaticvoidmain(String[]args) {StringinputStr="軟件學(xué)院-白晨-軟件222121601027";
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 機器人服務(wù)行業(yè)智能機器人操作系統(tǒng)考核試卷
- 電梯門機系統(tǒng)的故障分析與維修考核試卷
- 地質(zhì)勘查項目中的環(huán)境地質(zhì)調(diào)查與評價方法考核試卷
- 體育外交促進考核試卷
- 海洋氣象與漁業(yè)生產(chǎn)考核試卷
- 鹽工職業(yè)技能培訓(xùn)與晉升機制考核試卷
- 照明設(shè)計基礎(chǔ)與燈具選擇考核試卷
- 電子寵物配件零售考核試卷
- 2025簡易物業(yè)租賃合同協(xié)議
- 2025私募投資基金管理合同協(xié)議書范本 分級
- 小學(xué)道德與法治實踐性作業(yè)的設(shè)計與評價
- 2025年高壓電工作業(yè)考試國家總局題庫及答案(共280題)
- 中職語文高二上學(xué)期拓展模塊上冊期末模擬卷2打印版
- 辦公樓外立面節(jié)能亮化方案
- 醫(yī)院培訓(xùn)課件:《結(jié)直腸癌圍手術(shù)期的護理》
- 混凝土路面工程監(jiān)理實施細則
- 電子商務(wù)師(三級)技能理論考試復(fù)習(xí)題及答案
- 2024年西式面點師(技師)試題庫及答案
- if函數(shù)的使用省公開課獲獎?wù)n件市賽課比賽一等獎?wù)n件
- 《政府購買動物防疫社會化服務(wù)管理規(guī)范(征求意見稿)》
- 2024年四川省巴中市中考道德與法治試卷真題(含答案解析)
評論
0/150
提交評論