实习一瀵嗛挜鍒嗛厤

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实习一密钥分配一、实习目的1.理解密钥管理的重要性;2.掌握对称密码和公钥密码密钥管理的不同特性;3.掌握密钥分发基本方法,能设计密钥分发方案二、实习要求1.实习前认真预习第2章的有关内容;2.复习对称密码和公钥密码相关内容;3.熟悉Java平台的JCE包有关类。三、实习内容假定两个用户A、B,用户A、B的通讯密钥为K,他们的公私钥对分别是KPUa、KPRa和KPUb、KPRb,他们要进行安全通讯,密钥分发与通信过程如1所示。(1)根据图1所示,实现利用公钥密码算法分发对称密钥的过程。实现的阶梯任务如下:①以本地两个目录模拟两个用户,采用变量方式直接实现密钥的分发;②实现算法的图形化方式,用户可以选择算法、参数、工作模式等;③以文件方式管理密钥及明文、密文;④采用SSL,建立安全通信过程;⑤将方案移植到某个web应用中。(2)按照(1)的阶梯任务,实现基于DH密钥协定的密钥分发。对称密码通信Communicationbysymmetricalcryptography公开密码传输对称密钥Totransmitthekeyofsymmetricalcryptographybypubliccryptography发方Sender加密C=Ek(P)EncryptC=Ek(P)解密P=Dk(C)DecryptP=Dk(C)收方Accepter密钥KKeyK加密Ck=Epk(K)EncryptCk=Epk(K)解密K=Dsk(Ck)DecryptK=Dsk(Ck)密钥KKeyK明文PPlaintextP明文PPlaintextP密文CCryptographC密文CkCryptographCk公钥PKPublicKeyPK私钥SKPrivateKeySK图1基于混合加密的安全通信模型Fig.1Modelofsecurecommunicationbasedonmixedcryptography四、算法分析及流程图对称密码一般要求:1、加密解密用相同的密钥2、收发双方必须共享密钥安全性要求:1、密钥必须保密2、没有密钥,解密不可行3、知道算法和若干密文不足以确定密钥公钥密码一般要求:1、加密解密算法相同,但使用不同的密钥2、发送方拥有加密或解密密钥,而接收方拥有另一个密钥安全性要求:1、两个密钥之一必须保密2、无解密密钥,解密不可行3、知道算法和其中一个密钥以及若干密文不能确定另一个密钥五、程序运行结果1、利用DES算法生成对称密钥Key,运行程序后生成Key.dat文件StartDES生成密钥KRSA生成公钥密钥对RSA加密算法使用公钥对密钥K加密RSA解密算法使用私钥解密End2、利用RSA算法生成公钥密钥对,将公钥存入Pubkey文件夹下,将私钥存入Privkey文件夹下,运行程序后在Pubkey文件夹下生成Skey_RSA.dat文件,在Privkey文件夹下生成Skey_RSA.dat文件:3、利用RSA加密算法对对称密钥加密,将加密后文件保存为Enc_RSA.dat文件,运行程序后:4、利用RSA解密算法对密文进行解密,将解密后的文件Key.dat写入文件夹下,运行程序后文件夹下生成Key.dat文件:六、实验总结通过本次实习,加深了对DES和RSA的了解,通过使用DES算法和RSA算法实现密钥分发与通信过程,同时加深对电子商务安全的认识。在当今社会中电子商务安全将会有更广阔的应用前景。附录:源程序packagecom.skey;importjava.security.*;importjava.io.*;importjavax.crypto.*;publicclassSecretKey_DES{publicstaticvoidmain(Stringarge[])throwsException{KeyGeneratorkg=KeyGenerator.getInstance(DESede);//创建密钥生成器kg.init(168);//初始化密钥生成器SecretKeyk=kg.generateKey();//生成密钥//通过对象序列化方式将密钥保存在文件中FileOutputStreamf1=newFileOutputStream(Key.dat);ObjectOutputStreamb1=newObjectOutputStream(f1);b1.writeObject(k);}}packagecom.rsaskey;importjava.io.*;importjava.security.*;publicclassSecretKeyRSA{publicstaticvoidmain(String[]args)throwsException{//密钥对生成器KeyPairGenerator工厂,非对称加密算法:RSA,DSAKeyPairGeneratorkpg=KeyPairGenerator.getInstance(RSA);//制定密钥长度kpg.initialize(1024);//生成密钥对KeyPairkp=kpg.genKeyPair();PublicKeypbkey=kp.getPublic();PrivateKeyprkey=kp.getPrivate();FileOutputStreamf1=newFileOutputStream(Pubkey/Skey_RSA.dat);ObjectOutputStreamb1=newObjectOutputStream(f1);b1.writeObject(pbkey);FileOutputStreamf2=newFileOutputStream(Privkey/Skey_RSA.dat);ObjectOutputStreamb2=newObjectOutputStream(f2);b2.writeObject(prkey);}}packagecom.enc;importjava.security.interfaces.RSAPublicKey;importjava.math.*;importjava.io.*;publicclassEnc_RSA{publicstaticvoidmain(String[]args)throwsException{BufferedReaderin=newBufferedReader(newInputStreamReader(newFileInputStream(I:/Java/skey/Key.dat)));Strings=in.readLine();FileInputStreamf=newFileInputStream(I:/Java/skey/Pubkey/Skey_RSA.dat);ObjectInputStreamb=newObjectInputStream(f);//公钥转换为RSA公钥RSAPublicKeypbk=(RSAPublicKey)b.readObject();//获取公钥参数:公钥对应的整数e,用于取模的整数nBigIntegere=pbk.getPublicExponent();BigIntegern=pbk.getModulus();System.out.println(e=+e);System.out.println(n=+n);byteptext[]=s.getBytes(UTF8);BigIntegerm=newBigInteger(ptext);BigIntegerc=m.modPow(e,n);System.out.println(c=+c);Stringcs=c.toString();BufferedWriterout=newBufferedWriter(newOutputStreamWriter(newFileOutputStream(Enc_RSA.dat)));out.write(cs,0,cs.length());out.close();}}packagecom.enc;importjava.security.interfaces.*;importjava.math.*;importjava.io.*;publicclassDec_RSA{publicstaticvoidmain(String[]args)throwsException{BufferedReaderin=newBufferedReader(newInputStreamReader(newFileInputStream(Enc_RSA.dat)));Stringctext=in.readLine();BigIntegerc=newBigInteger(ctext);FileInputStreamf=newFileInputStream(I:/Java/skey/Privkey/Skey_RSA.dat);ObjectInputStreamb=newObjectInputStream(f);RSAPrivateKeyprk=(RSAPrivateKey)b.readObject();BigIntegerd=prk.getPrivateExponent();BigIntegern=prk.getModulus();System.out.println(d=+d);System.out.println(n=+n);BigIntegerm=c.modPow(d,n);System.out.println(m=+m);byte[]mt=m.toByteArray();System.out.println(PlainTextis);for(inti=0;imt.length;i++){System.out.print((char)mt[i]);FileOutputStreamf1=newFileOutputStream(Key.dat);ObjectOutputStreamb1=newObjectOutputStream(f1);b1.writeObject(m);}}}

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功