收藏 分享(赏)

信息安全实验报告new.doc

上传人:dreamzhangning 文档编号:2284199 上传时间:2018-09-09 格式:DOC 页数:19 大小:164.50KB
下载 相关 举报
信息安全实验报告new.doc_第1页
第1页 / 共19页
信息安全实验报告new.doc_第2页
第2页 / 共19页
信息安全实验报告new.doc_第3页
第3页 / 共19页
信息安全实验报告new.doc_第4页
第4页 / 共19页
信息安全实验报告new.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

1、武汉理工大学学 生 实 验 报 告 书实验课程名称 信息安全 开 课 学 院 计算机科学与技术学院 指导老师姓名 学 生 姓 名 学生专业班级 2011 2012 学年 第 二 学期学生学号 实验课成绩实验课程名称: 信息安全 实验项目名称 DES 对称分组密码系统的 Java 实现 实验成绩实验者 专业班级 组别同组者 实验日期 12 年 6 月 18 日第一部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)原理:(1)分组密码的加密方式是:首先将明文序列以固定长度进行分组,每组明文用相同的密钥和算法进行变换,得到一组密文。分组密码是以块为单位,在密钥的控制下进行一系列线性和非线性

2、变换而得到密文的。(2)分组密码的加/解密运算是:输出块中的每一位是由输入块的每一位和密钥的每一位共同决定。(3)加密算法中重复地使用替代和移位两种基本的加密变换,此即 Shannon 1949年发现的隐藏信息的两种技术:混淆和扩散。混淆:就是改变数据块,使输出位与输入位之间没有明显的统计关系(替代);扩散:就是通过密钥位转移到密文的其它位上(移位)。(4)分组密码的特点:良好的扩散性;对插入信息的敏感性,较强的适应性;加/解密速度慢;差错的扩散和传播。要求:DES 对称分组密码系统的 Java 实现。二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述

3、)import java.security.spec.*;import javax.crypto.*;import javax.crypto.spec.*;class DES01 private String strkey;private SecretKey skey=null;private String algo=“DES/ECB/PKCS5Padding“,“DES/ECB/NoPadding“,“DES“;public DES01(String key)strkey=key;public void keyGenerating() throws Exceptionbyte bkey=st

4、rkey.getBytes();KeySpec ks = new DESKeySpec(bkey);SecretKeyFactory kf= SecretKeyFactory.getInstance(“DES“);skey = kf.generateSecret(ks);public static void main(String a) DES01 des = new DES01(“IAMASTUDENT“);des.test02(“STUDENTWANGFENGLIMING“);public byte Encripting(String plaintext,int i)throws Exce

5、ptionbyte bpt=plaintext.getBytes();Cipher cf = Cipher.getInstance(algoi);if(skey=null)this.keyGenerating();cf.init(Cipher.ENCRYPT_MODE,skey);byte bct = cf.doFinal(bpt);return bct;public byte decripting(byte bct,int i)throws ExceptionCipher cf = Cipher.getInstance(algoi);if(skey=null)this.keyGenerati

6、ng();cf.init(Cipher.DECRYPT_MODE,skey);byte bpt = cf.doFinal(bct);return bpt;public void test01(String mess)trybyte ct=this.Encripting(mess,0);byte pt=this.Decripting(ct,0);String ptt=new String(pt);System.out.println(ptt);catch(Exception ex)return;public void test02(String mess)try/Encriptingprint(

7、“Plaintext to be encripted:“);print(mess);byte ct=this.Encripting(mess,0);/Exploiting the resultsprint(“Byte array of cipher:“);for(int i=0;ict.length;i+)System.out.print(cti+“ “);print(“);for(int i=0;ict.length;i+)cti=(byte)(ctiString ciphertxt=new String(ct);print(“Cipher Text :“+ciphertxt);byte c

8、tcode = ciphertxt.getBytes();/ /Decriptingbyte pt=this.decripting(ctcode,0);String ptt=new String(pt);print(“Plaintext after decripting:“);print(ptt);catch(Exception ex)return;public static byte hex2Bytes(String str) if (str=null) return null; else if (str.length() 2) return null; else int len = str

9、.length() / 2;byte buffer = new bytelen;for (int i=0; ilen; i+) bufferi = (byte) Integer.parseInt(str.substring(i*2,i*2+2),16);return buffer;public static String bytes2Hex(byte data) if (data=null) return null; else int len = data.length;String str = “;for (int i=0; ilen; i+) if (dataielse str = str

10、+ java.lang.Integer.toHexString(dataireturn str.toUpperCase();三、主要仪器设备及耗材计算机 JDK1.6+NetBean 6.5.1 第二部分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)编辑代码,点击运行程序。二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)运行结果如下:三、实验小结、建议及体会通过此次实验,让我了解到如何用 Java实现 DES对称分组密码系统,加深对信息安全中DES对称分组密码的理解;熟悉了分组密码的相关原理。另外

11、,也让我重新熟悉了 Java语言的相关内容,加深了对 JAVA语言的用途的理解。通过本试验的完成,更加加深了对信息安全的理解。 实验课程名称: 信息安全 实验项目名称 RSA 公钥密码系统的 Java 实现 实验成绩实验者 专业班级 组别同组者 实验日期 12 年 6 月 18 日第一部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)原理:RSA 公钥密码系统RSA加密算法是由 Rivest、Shamir 和 Adleman提出的基于素数理论的密码系统,是第一个较为成功的公钥密码系统,也是目前应用比较广泛的公钥密码系统。二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步

12、骤等,用硬件逻辑或者算法描述)/* To change this template, choose Tools | Templates* and open the template in the editor.*/package rsa;import java.math.BigInteger;import java.util.Scanner;import java.util.Random;/* author Administrator*/public class RSABigInteger private BigInteger bign,ukey,rkey,eulerPhi;private i

13、nt bitBLength=32;/* return the bign*/public BigInteger getBign() return bign;public RSABigInteger()this.generatingUAndRKey();public static void main(String args)RSABigInteger rsa = new RSABigInteger();rsa.test02();public void test()long ptt=25;System.out.println(“Before encripting plaintext= “+ptt);

14、BigInteger pt = BigInteger.valueOf(ptt);BigInteger ct=this.encripting(pt);System.out.println(“The ciphertext=“+ct.longValue();pt = this.decripting(ct);System.out.println(“After decripting the plaintext = “+pt.longValue();public void test02()BigInteger bgPt,bgCt;byte btPt,btCt;/long lgPt,lgCt;long lg

15、C;String strPt,strCt;int len,i;pstr(“Input a plain text to be encripted:“);Scanner scanf = new Scanner(System.in);strPt=scanf.nextLine();pstr(“The plain text to be encripted:“+strPt);len=strPt.length();bgPt=new BigIntegerlen; bgCt=new BigIntegerlen;/lgPt=new longlen;/lgCt=new longlen;btPt=strPt.getB

16、ytes();btCt=new bytelen;/Encriptingpstr(“Encripting“);for(i=0;ilen;i+)lgC =(long)btPti;bgPti=BigInteger.valueOf(lgC);bgCti=this.encripting(bgPti);lgC=bgCti.longValue();btCti=(byte)lgC;strCt = new String(btCt);pstr(“The ciphertext is “+strCt);/Decriptingpstr(“Decripting“);for(i=0;ilen;i+)bgPti=this.d

17、ecripting(bgCti);lgC=bgPti.longValue();btPti=(byte)lgC;strPt=new String(btPt);pstr(“The refound plain text is:“+strPt);public void pstr(String mess)System.out.println(mess);/* param bign the bign to set*/public void setBign(BigInteger bign) this.bign = bign;/* return the ukey*/public BigInteger getU

18、key() return ukey;/* param ukey the ukey to set*/public void setUkey(BigInteger ukey) this.ukey = ukey;/* return the rkey*/public BigInteger getRkey() return rkey;/* param rkey the rkey to set*/public void setRkey(BigInteger rkey) this.rkey = rkey;public void generatingUAndRKey()Random ran = new Ran

19、dom();BigInteger p =BigInteger.probablePrime(this.bitBLength,ran);BigInteger q =BigInteger.probablePrime(this.bitBLength,ran);this.bign =p.multiply(q);this.eulerPhi=(p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE);dothis.ukey=BigInteger.probablePrime(bitBLength,ran);while(!this.ukey.g

20、cd(this.eulerPhi).equals(BigInteger.ONE);this.rkey=this.ukey.modInverse(this.eulerPhi);public BigInteger encripting(BigInteger plaintext)return plaintext.modPow(this.ukey, this.bign);public BigInteger decripting(BigInteger ciphertext)return ciphertext.modPow(this.rkey, this.bign);/* return the euler

21、Phi*/public BigInteger getEulerPhi() return eulerPhi;/* param eulerPhi the eulerPhi to set*/public void setEulerPhi(BigInteger eulerPhi) this.eulerPhi = eulerPhi;/* return the bitBLength*/public int getBitBLength() return bitBLength;/* param bitBLength the bitBLength to set*/public void setBitBLengt

22、h(int bitBLength) this.bitBLength = bitBLength;三、主要仪器设备及耗材计算机EclipseJDK1.6+NetBean 6.5.1第二部分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)编写程序并调试,调试完毕,点击运行,查看结果。二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)三、实验小结、建议及体会通过此次实验,让我了解到如何用 Java实现:RSA 公钥密码系统,加深对信息安全中对RSA公钥密码系统的理解;熟悉了 RSA公钥密码的相关原理。另外,也

23、让我重新熟悉了 Java语言的相关内容,加深了对 JAVA语言的用途的理解。通过本试验的完成,更加加深了对信息安全的理解。实验课程名称: 信息安全 实验项目名称 ECC 公钥密码系统的 Java 实现 实验成绩实验者 专业班级 组别同组者 实验日期 12 年 6 月 18 日第一部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)原理:ECC 公钥密码系统椭圆曲线用于加密找到一个难题:考虑等式Q=kP,其中Q、P 属于Ep(a,b),kp已知k 和P,计算Q,是容易的已知Q 和P,计算k,是困难的选择Ep(a,b)的元素G,使得G 的阶n 是一个大素数G 的阶是指满足nG=O 的最小n

24、 值秘密选择整数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加密信息有扩张算法:Create a java bean that can express a point of an EC over a finite fieldCreate a class method that can calculate 2P,for example POINT Doub

25、le(Point p)Create a class method that can calculate P+Q, for example POINT Add(Point p, Point Q)Create a class method that can calculate mP, the algorithm should be recursive:1) If m=1 then return P2) Else if m=2 then3) Call Double(P)4) Else if m mod 2 = 1 thena) Point Q= MP(m-1,P)b) Return Add(Q,P)

26、5) Else if m mod 2 = 0 thena) Point Q=Double(P)b) Return MP(m/2, Q)Implementing the encripting and decripting algorithm of ECC二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)package ecc;public class ECCImpClass private int a,p;private POINT ukAlpha,ukBeta;private int rKey;/* Method ECCImpClass*/publi

27、c ECCImpClass() / TODO: Add your code herepublic ECCImpClass(int a,int p) / TODO: Add your code herethis.a=a;this.p=p;public ECCImpClass(int a,int p,int priK,POINT alpha) / TODO: Add your code herethis.a=a;this.p=p;this.rKey=priK;this.ukAlpha=alpha;this.generatingUkBeta();public int euclid(int x0,in

28、t y0)int x,y,a,b,c,d,pa,pb,pc,pd,q,r;int res = new int2;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(a0)a=a+y0;res0=x;res1=a;return (res);public int aUpBModP(int a,int b,int p)int invB,res1;a=a%p;b=b%p;int res=t

29、his.euclid(b,p);invB=res1;res1=(a*invB)%p;if(res10)res1=res1+p;return res1;public POINT doublePoints(POINT pt)int x1,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(x20)x2=

30、x2+this.p;if(y20)y2=y2+this.p;return new POINT(x2,y2);public POINT anyPoint(int m,POINT pt)int k;if(m=1)return pt;else if(m=2) return this.doublePoints(pt);elseif(m%2=0)k=m/2;POINT p1=this.doublePoints(pt);return this.anyPoint(k,p1);elsePOINT p1=this.anyPoint(m-1,pt);return this.add2Points(pt,p1);pu

31、blic POINT add2Points(POINT p1,POINT p2)int x1,y1,x2,y2,x3,y3,lambda,n1,n2;if(p1.isSamePoint(p2)return this.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

32、0)x3=x3+this.p;if(y30)y3=y3+this.p;return new POINT(x3,y3);public void generatingUkBeta()this.ukBeta=this.anyPoint(this.rKey,this.ukAlpha);public POINT getUkBeta()5return this.ukBeta;public POINT getUkAlpha()return this.ukAlpha;public int getRKey()return this.rKey;public POINT encripting(POINT pt,in

33、t ranK)POINT ct = new POINT2;ct0=this.anyPoint(ranK,this.ukAlpha);POINT temp = this.anyPoint(ranK,this.ukBeta);ct1=this.add2Points(pt,temp);return ct;public POINT decripting(POINT ct)POINT p1,p2,p3;p1=new POINT();p1.setX(ct0.getX();p1.setY(-ct0.getY();p2=this.anyPoint(this.rKey,p1);p3=this.add2Point

34、s(ct1,p2);return p3;/* Method main* param args*/public static void p(String m)System.out.println(m);public static void main(String args) / TODO: Add your code hereECCImpClass ecc = new ECCImpClass();int res=ecc.euclid(2008512,4321);p(“Euclid application:“);System.out.println(res0+“:“+res1);p(“a/b mo

35、d p application:“);System.out.println(ecc.aUpBModP(13,17,19);ECCImpClass ecc2 = new ECCImpClass(1,11);POINT p =ecc2.doublePoints(new POINT(5,2);p.printPoint();POINT p1 =ecc2.add2Points(new POINT(10,9),new POINT(2,4);p1.printPoint();POINT p2=ecc2.anyPoint(32,new POINT(2,7);p2.printPoint();System.out.

36、println(“Testing the ecc:“);ECCImpClass ecc3=new ECCImpClass(1,11,7,new POINT(2,7);POINT beta=ecc3.getUkBeta();beta.printPoint();POINT ct = ecc3.encripting(new POINT(5,9),3);ct0.printPoint();ct1.printPoint();POINT x=ecc3.decripting(ct);x.printPoint();class POINTprivate int x,y;public POINT()public P

37、OINT(int x,int y)this.x=x;this.y=y;public void setX(int x)this.x=x;public void setY(int y)this.y=y;public int getX()return x;public int getY()return y;public boolean isSamePoint(POINT p)if(x=p.getX()elsereturn false;public void printPoint()System.out.println(“The point is (“+this.x+“,“+this.y+“)“);p

38、ublic POINT signPoint()return new POINT(-this.x,-this.y);三、主要仪器设备及耗材计算机EclipseJDK1.6+NetBean 6.5.第二部分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)编辑程序,调试并运行,观察结果。二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)三、实验小结、建议及体会通过此次实验,让我了解到如何用 Java实现:ECC 公钥密码系统,加深对信息安全中对ECC公钥密码系统的理解;熟悉了 ECC公钥密码的相关原理。另外,也让我重新熟悉了 Java语言的相关内容,加深了对 JAVA语言的用途的理解。通过本试验的完成,更加加深了对信息安全的理解。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报