信息安全实验报告-2_第1页
信息安全实验报告-2_第2页
信息安全实验报告-2_第3页
信息安全实验报告-2_第4页
信息安全实验报告-2_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

学生学号实验课成绩武汉理工大学学生实验报告书实验课程名称信息安全开课学院计算机科学与技术学院指导老师姓名学生姓名学生专业班级2011—2012学年第二学期实验课程名称:信息安全实验项目名称DES对称分组密码系统的Java实现实验成绩实验者专业班级组别同组者实验日期12第一部分:实验分析与设计(可加页)实验内容描述(问题域描述)原理:(1)分组密码的加密方式是:首先将明文序列以固定长度进行分组,每组明文用相同的密钥和算法进行变换,得到一组密文。分组密码是以块为单位,在密钥的控制下进行一系列线性和非线性变换而得到密文的。(2)分组密码的加/解密运算是:输出块中的每一位是由输入块的每一位和密钥的每一位共同决定。(3)加密算法中重复地使用替代和移位两种基本的加密变换,此即Shannon1949年发现的隐藏信息的两种技术:混淆和扩散。混淆:就是改变数据块,使输出位与输入位之间没有明显的统计关系(替代);扩散:就是通过密钥位转移到密文的其它位上(移位)。(4)分组密码的特点:良好的扩散性;对插入信息的敏感性,较强的适应性;加/解密速度慢;差错的扩散和传播。要求:DES对称分组密码系统的Java实现。实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)importjava.security.spec.*;importjavax.crypto.*;importjavax.crypto.spec.*;classDES01{privateStringstrkey;privateSecretKeyskey=null;privateString[]algo={"DES/ECB/PKCS5Padding","DES/ECB/NoPadding","DES"};publicDES01(Stringkey){strkey=key;}publicvoidkeyGenerating()throwsException{byte[]bkey=strkey.getBytes();KeySpecks=newDESKeySpec(bkey);SecretKeyFactorykf=SecretKeyFactory.getInstance("DES");skey=kf.generateSecret(ks);}publicstaticvoidmain(String[]a){DES01des=newDES01("IAMASTUDENT");des.test02("STUDENTWANGFENGLIMING");}publicbyte[]Encripting(Stringplaintext,inti)throwsException{byte[]bpt=plaintext.getBytes();Ciphercf=Cipher.getInstance(algo[i]);if(skey==null)this.keyGenerating();cf.init(Cipher.ENCRYPT_MODE,skey);byte[]bct=cf.doFinal(bpt);returnbct;}publicbyte[]decripting(byte[]bct,inti)throwsException{Ciphercf=Cipher.getInstance(algo[i]);if(skey==null)this.keyGenerating();cf.init(Cipher.DECRYPT_MODE,skey);byte[]bpt=cf.doFinal(bct);returnbpt;}publicvoidtest01(Stringmess){try{byte[]ct=this.Encripting(mess,0);byte[]pt=this.Decripting(ct,0);Stringptt=newString(pt);System.out.println(ptt);}catch(Exceptionex){return;}}publicvoidtest02(Stringmess){try{//Encriptingprint("Plaintexttobeencripted:");print(mess);byte[]ct=this.Encripting(mess,0);//Exploitingtheresultsprint("Bytearrayofcipher:");for(inti=0;i<ct.length;i++)System.out.print(ct[i]+"");print("");for(inti=0;i<ct.length;i++)ct[i]=(byte)(ct[i]&0xFF);Stringciphertxt=newString(ct);print("CipherText:"+ciphertxt);byte[]ctcode=ciphertxt.getBytes();//Decriptingbyte[]pt=this.decripting(ctcode,0);Stringptt=newString(pt);print("Plaintextafterdecripting:");print(ptt);}catch(Exceptionex){return;}}publicstaticbyte[]hex2Bytes(Stringstr){if(str==null){returnnull;}elseif(str.length()<2){returnnull;}else{intlen=str.length()/2;byte[]buffer=newbyte[len];for(inti=0;i<len;i++){buffer[i]=(byte)Integer.parseInt(str.substring(i*2,i*2+2),16);}returnbuffer;}}publicstaticStringbytes2Hex(byte[]data){if(data==null){returnnull;}else{intlen=data.length;Stringstr="";for(inti=0;i<len;i++){if((data[i]&0xFF)<16)str=str+"0"+java.lang.Integer.toHexString(data[i]&0xFF);elsestr=str+java.lang.Integer.toHexString(data[i]&0xFF);}returnstr.toUpperCase();}}}三、主要仪器设备及耗材计算机JDK1.6+NetBean6.5.1第二部分:实验调试与结果分析(可加页)调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)编辑代码,点击运行程序。实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)运行结果如下:实验小结、建议及体会通过此次实验,让我了解到如何用Java实现DES对称分组密码系统,加深对信息安全中DES对称分组密码的理解;熟悉了分组密码的相关原理。另外,也让我重新熟悉了Java语言的相关内容,加深了对JAVA语言的用途的理解。通过本试验的完成,更加加深了对信息安全的理解。实验课程名称:信息安全实验项目名称RSA公钥密码系统的Java实现实验成绩实验者专业班级组别同组者实验日期12第一部分:实验分析与设计(可加页)实验内容描述(问题域描述)原理:RSA公钥密码系统 RSA加密算法是由Rivest、Shamir和Adleman提出的基于素数理论的密码系统,是第一个较为成功的公钥密码系统,也是目前应用比较广泛的公钥密码系统。实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)/**Tochangethistemplate,chooseTools|Templates*andopenthetemplateintheeditor.*/packagersa;importjava.math.BigInteger;importjava.util.Scanner;importjava.util.Random;/****@authorAdministrator*/publicclassRSABigInteger{privateBigIntegerbign,ukey,rkey,eulerPhi;privateintbitBLength=32;/***@returnthebign*/publicBigIntegergetBign(){returnbign;}publicRSABigInteger(){this.generatingUAndRKey();}publicstaticvoidmain(String[]args){RSABigIntegerrsa=newRSABigInteger();rsa.test02();}publicvoidtest(){longptt=25;System.out.println("Beforeencriptingplaintext="+ptt);BigIntegerpt=BigInteger.valueOf(ptt);BigIntegerct=this.encripting(pt);System.out.println("Theciphertext="+ct.longValue());pt=this.decripting(ct);System.out.println("Afterdecriptingtheplaintext="+pt.longValue());}publicvoidtest02(){BigInteger[]bgPt,bgCt;byte[]btPt,btCt;//long[]lgPt,lgCt;longlgC;StringstrPt,strCt;intlen,i;pstr("Inputaplaintexttobeencripted:");Scannerscanf=newScanner(System.in);strPt=scanf.nextLine();pstr("Theplaintexttobeencripted:"+strPt);len=strPt.length();bgPt=newBigInteger[len];bgCt=newBigInteger[len];//lgPt=newlong[len];//lgCt=newlong[len];btPt=strPt.getBytes();btCt=newbyte[len];//Encriptingpstr("Encripting....");for(i=0;i<len;i++){lgC=(long)btPt[i];bgPt[i]=BigInteger.valueOf(lgC);bgCt[i]=this.encripting(bgPt[i]);lgC=bgCt[i].longValue();btCt[i]=(byte)lgC;}strCt=newString(btCt);pstr("Theciphertextis"+strCt);//Decriptingpstr("Decripting....");for(i=0;i<len;i++){bgPt[i]=this.decripting(bgCt[i]);lgC=bgPt[i].longValue();btPt[i]=(byte)lgC;}strPt=newString(btPt);pstr("Therefoundplaintextis:"+strPt);}publicvoidpstr(Stringmess){System.out.println(mess);}/***@parambignthebigntoset*/publicvoidsetBign(BigIntegerbign){this.bign=bign;}/***@returntheukey*/publicBigIntegergetUkey(){returnukey;}/***@paramukeytheukeytoset*/publicvoidsetUkey(BigIntegerukey){this.ukey=ukey;}/***@returntherkey*/publicBigIntegergetRkey(){returnrkey;}/***@paramrkeytherkeytoset*/publicvoidsetRkey(BigIntegerrkey){this.rkey=rkey;}publicvoidgeneratingUAndRKey(){Randomran=newRandom();BigIntegerp=BigIbablePrime(this.bitBLength,ran);BigIntegerq=BigIbablePrime(this.bitBLength,ran);this.bign=p.multiply(q);this.eulerPhi=(p.subtract(BigInteger.ONE)).multiply(q.subtract(BigInteger.ONE));do{this.ukey=BigIbablePrime(bitBLength,ran);}while(!this.ukey.gcd(this.eulerPhi).equals(BigInteger.ONE));this.rkey=this.ukey.modInverse(this.eulerPhi);}publicBigIntegerencripting(BigIntegerplaintext){returnplaintext.modPow(this.ukey,this.bign);}publicBigIntegerdecripting(BigIntegerciphertext){returnciphertext.modPow(this.rkey,this.bign);}/***@returntheeulerPhi*/publicBigIntegergetEulerPhi(){returneulerPhi;}/***@parameulerPhitheeulerPhitoset*/publicvoidsetEulerPhi(BigIntegereulerPhi){this.eulerPhi=eulerPhi;}/***@returnthebitBLength*/publicintgetBitBLength(){returnbitBLength;}/***@parambitBLengththebitBLengthtoset*/publicvoidsetBitBLength(intbitBLength){this.bitBLength=bitBLength;}}三、主要仪器设备及耗材计算机EclipseJDK1.6+NetBean6.5.1第二部分:实验调试与结果分析(可加页)调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等) 编写程序并调试,调试完毕,点击运行,查看结果。实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)实验小结、建议及体会通过此次实验,让我了解到如何用Java实现:RSA公钥密码系统,加深对信息安全中对RSA公钥密码系统的理解;熟悉了RSA公钥密码的相关原理。另外,也让我重新熟悉了Java语言的相关内容,加深了对JAVA语言的用途的理解。通过本试验的完成,更加加深了对信息安全的理解。实验课程名称:信息安全实验项目名称ECC公钥密码系统的Java实现实验成绩实验者专业班级组别同组者实验日期12年6月18日第一部分:实验分析与设计(可加页)实验内容描述(问题域描述)原理:ECC公钥密码系统椭圆曲线用于加密找到一个难题:考虑等式Q=kP,其中Q、P属于Ep(a,b),k<p已知k和P,计算Q,是容易的已知Q和P,计算k,是困难的选择Ep(a,b)的元素G,使得G的阶n是一个大素数G的阶是指满足nG=O的最小n值秘密选择整数r,计算P=rG,然后公开(p,a,b,G,P),P为公钥保密r加密M:先把消息M变换成为Ep(a,b)中一个点Pm然后,选择随机数k,计算密文Cm={kG,Pm+kP)如果k使得kG或者kP为O,则要重新选择k.解密Cm:(Pm+kP)-r(kG)=Pm+krG-rkG=Pm加密信息有扩张算法:CreateajavabeanthatcanexpressapointofanECoverafinitefieldCreateaclassmethodthatcancalculate2P,forexamplePOINTDouble(Pointp)CreateaclassmethodthatcancalculateP+Q,forexamplePOINTAdd(Pointp,PointQ)CreateaclassmethodthatcancalculatemP,thealgorithmshouldberecursive:1)Ifm=1thenreturnP2)Elseifm=2then3)CallDouble(P)4)Elseifmmod2=1thena)PointQ=MP(m-1,P)b)ReturnAdd(Q,P)5)Elseifmmod2=0thena)PointQ=Double(P)b)ReturnMP(m/2,Q)ImplementingtheencriptinganddecriptingalgorithmofECC二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)packageecc;publicclassECCImpClass{privateinta,p;privatePOINTukAlpha,ukBeta;privateintrKey;/***MethodECCImpClass***/publicECCImpClass(){//TODO:Addyourcodehere}publicECCImpClass(inta,intp){//TODO:Addyourcodeherethis.a=a;this.p=p;}publicECCImpClass(inta,intp,intpriK,POINTalpha){//TODO:Addyourcodeherethis.a=a;this.p=p;this.rKey=priK;this.ukAlpha=alpha;this.generatingUkBeta();}publicint[]euclid(intx0,inty0){intx,y,a,b,c,d,pa,pb,pc,pd,q,r;int[]res=newint[2];x=x0;y=y0;pa=1;pb=0;pc=0;pd=1;a=1;b=0;c=0;d=1;while(y!=0){r=x%y;q=(x-r)/y;a=pc;b=pd;c=pa-q*pc;d=pb-q*pd;x=y;y=r;pa=a;pb=b;pc=c;pd=d;}if(a<0){a=a+y0;}res[0]=x;res[1]=a;return(res);}publicintaUpBModP(inta,intb,intp){intinvB,res1;a=a%p;b=b%p;int[]res=this.euclid(b,p);invB=res[1];res1=(a*invB)%p;if(res1<0){res1=res1+p;}returnres1;}publicPOINTdoublePoints(POINTpt){intx1,y1,x2,y2,lambda,n1,n2;x1=pt.getX();y1=pt.getY();n1=3*x1*x1+this.a;n2=2*y1;lambda=this.aUpBModP(n1,n2,this.p);x2=(lambda*lambda-2*x1)%(this.p);y2=((x1-x2)*lambda-y1)%(this.p);if(x2<0){x2=x2+this.p;}if(y2<0){y2=y2+this.p;}returnnewPOINT(x2,y2);}publicPOINTanyPoint(intm,POINTpt){intk;if(m==1)returnpt;elseif(m==2)returnthis.doublePoints(pt);else{if(m%2==0){k=m/2;POINTp1=this.doublePoints(pt);returnthis.anyPoint(k,p1);}else{POINTp1=this.anyPoint(m-1,pt);returnthis.add2Points(pt,p1);}}}publicPOINTadd2Points(POINTp1,POINTp2){intx1,y1,x2,y2,x3,y3,lambda,n1,n2;if(p1.isSamePoint(p2))returnthis.doublePoints(p1);x1=p1.getX();y1=p1.getY();x2=p2.getX();y2=p2.getY();n1=y2-y1;n2=x2-x1;lambda=this.aUpBModP(n1,n2,this.p);x3=(lambda*lambda-x1-x2)%(this.p);y3=((x1-x3)*lambda-y1)%(this.p);if(x3<0){x3=x3+this.p;}if(y3<0){y3=y3+this.p;}returnnewPOINT(x3,y3);}publicvoidgeneratingUkBeta(){this.ukBeta=this.anyPoint(this.rKey,this.ukAlpha);}publicPOINTgetUkBeta()5{returnthis.ukBeta;}publicPOINTgetUkAlpha(){returnthis.ukAlpha;}publicintgetRKey(){returnthis.rKey;}publicPOINT[]encripting(POINTpt,intranK){POINT[]ct=newPOINT[2];ct[0]=this.anyPoint(ranK,this.ukAlpha);POINTtemp=this.anyPoint(ranK,this.ukBeta);ct[1]=this.add2Points(pt,temp);returnct;}publicPOINTdecripting(POINT[]ct){POINTp1,p2,p3;p1=newPOINT();p1.setX(ct[0].getX());p1.setY(-ct[0].getY());p2=this.anyPoint(this.rKey,p1);p3=this.add2Points(ct[1],p2);returnp3;}/***Methodmain***@paramargs**/publicstaticvoidp(Stringm){System.out.println(m);}publicstaticvoidmain(String[]args){//TODO:AddyourcodehereECCImpClassecc=newECCImpClass();int[]res=ecc.euclid(2008512,4321);p("Euclidapplication:");System.out.println(res[0]+":"+res[1]);p("a/bmodpapplication:");System.out.println(ecc.aUpBModP(13,17,19));ECCImpClassecc2=newECCImpClass(1,11);POINTp=ecc2.d

温馨提示

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

评论

0/150

提交评论