网络安全实验报告书_第1页
网络安全实验报告书_第2页
网络安全实验报告书_第3页
网络安全实验报告书_第4页
网络安全实验报告书_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

网络安全实验报告 姓名: 白晨 班级: 软件22指导老师: 田暄提交日期: 2015-12-10目录1 加解密与认证 21.1 实验环境 21.2 源代码与注释 21.3 运行结果与分析 72 RC4流密码加密实现 82.1 实验环境 82.2 源代码与注释 82.3 运行结果与分析 103 大于3人实现证书生成、签发、通信 113.1 实验环境 113.2 实验过程与分析 11

加解密与认证要求:结合所提供密码学开发库或利用Java,vc自带密码学开发库完成如下要求1)设计实现消息的机密性,完整性与可鉴别,认证要求。2)报告中要有思路分析,设计流程与关键代码。每步变换后的结果3)要求结合个人信息进行,如消息中应包含个人学号,姓名等4)应使用到消息分组,不能太短实验环境语言 :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-软件学院-软件22-网安实验-加密与解密"); test.setCiphers(test.encrypt()); print(test.decrypt()); }}运行结果与分析实验所用加密算法为DES,签名算法为:DSA,消息摘要的生成用的为SHA-1,分组为28字节一组,内容结构为:摘要+分组信息+消息+签名长度+签名由于加密是对每一组进行加密的。在组中先填充消息摘要等消息。所以可以看到第二段(第一次加密Group1结束)中在密文第一个字节(-56)前有一段消息摘要等其他消息。解密后生成摘要与签名的摘要进行比对,没有问题。

RC4流密码加密实现实验环境语言 :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="软件学院-白晨-软件222121601027";

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论