收藏 分享(赏)

密钥分配.doc

上传人:dcs1276 文档编号:8100662 上传时间:2019-06-08 格式:DOC 页数:7 大小:634.50KB
下载 相关 举报
密钥分配.doc_第1页
第1页 / 共7页
密钥分配.doc_第2页
第2页 / 共7页
密钥分配.doc_第3页
第3页 / 共7页
密钥分配.doc_第4页
第4页 / 共7页
密钥分配.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、实习一 密钥分配一、实习目的1理解密钥管理的重要性;2掌握对称密码和公钥密码密钥管理的不同特性;3掌握密钥分发基本方法,能设计密钥分发方案二、实习要求1实习前认真预习第 2 章的有关内容;2复习对称密码和公钥密码相关内容;3熟悉 Java 平台的 JCE 包有关类。三、 实习内容假定两个用户 A、B,用户 A、B 的通讯密钥为 K,他们的公私钥对分别是 KPUa、K PRa和 KPUb、K PRb,他们要进行安全通讯,密钥分发与通信过程如 1 所示。(1)根据图 1 所示,实现利用公钥密码算法分发对称密钥的过程。实现的阶梯任务如下:以本地两个目录模拟两个用户,采用变量方式直接实现密钥的分发;实

2、现算法的图形化方式,用户可以选择算法、参数、工作模式等;以文件方式管理密钥及明文、密文;采用 SSL,建立安全通信过程;将方案移植到某个 web 应用中。(2)按照(1)的阶梯任务,实现基于 DH 密钥协定的密钥分发。 三、数据测试及预期结果对 称 密 码 通 信Comunicaton bysmetrical ryptography公 开 密 码 传 输 对 称 密 钥To transmit heky ofsymetrical ryptography bpulic ryptography发 方Sendr 加 密 C=Ek(P)Encrypt 解 密 P=Dk(C)Decrypt 收 方Acep

3、tr密 钥 Key加 密 Ck=Ep(K)Encryptk 解 密 K=Dsk(C)Decrypt 密 钥 Key明 文 PPlaintex 明 文 PPlaintex 密 文 CCryptograh密 文 CkCryptograph公 钥 PKPublicey 私 钥 SK Privatey图 1 基 于 混 合 加 密 的 安 全 通 信 模 型Fig.1 Model fsecur omunication based onmixed cryptograhy 1、利用 DES 算法生成对称密钥 Key,运行程序后生成 Key.dat 文件2、利用 RSA 算法生成公钥密钥对,将公钥存入 A

4、文件夹下,将私钥存入 B 文件夹下,运行程序后在 A 文件夹下生成 Skey_RSA_pub.dat 文件,在 B 文件夹下生成Skey_RSA_priv.dat 文件:3、利用 RSA 加密算法对对称密钥加密,将加密后文件保存为 Enc_RSA.dat 文件,运行程序后:4、 利用 RSA 解密算法对密文进行解密,将解密后的文件 Key.dat 写入 B 文件夹下,运行程序后 B 文件夹下生成 Key.dat 文件:四、算法分析及流程图StartDES 生成密钥KRSA 生成公钥密钥对RSA 加密算法使用公钥对密钥 K 加密RSA 解密算法使用私钥解密End五、实验总结通过本次实习,复习了

5、DES 和 RSA 的相关知识,通过使用 DES 算法和 RSA 算法实现密钥分发与通信过程,对密钥的分配过程有了一定的了解。还复习了 java 中有关加密解密的类库,感叹 Java 真的是很强大呀。还有就是 也能提高我们自己的安全意识,之所以要学习安全类的课程,就是因为网络是不安全的。学习了之后也能的以后的开发中避免类似的问题。附录:源程序/生成对称密钥package Skey;import java.io.FileOutputStream;import java.io.ObjectOutputStream;import javax.crypto.KeyGenerator;import ja

6、vax.crypto.SecretKey;public class Skey_DES /* param args*/ TODO Auto-generated method stub/对称密钥的生成,并通过对象序列化方式保存在文件中public static void main(String args) throws ExceptionKeyGenerator kg=KeyGenerator.getInstance(“DESede“);/创建密钥生成器kg.init(168);/初始化密钥生成器SecretKey k=kg.generateKey( );/生成密钥/通过对象序列化方式将密钥保存在

7、文件中FileOutputStream f1=new FileOutputStream(“A/Key.dat“);ObjectOutputStream b1=new ObjectOutputStream(f1);b1.writeObject(k);/生成对称密钥对package RSA;import java.io.*;import java.security.*;public class Skey_RSA /* param args*/public static void main(String args) throws Exception/密钥对生成器KeyPairGenerator工厂,

8、非对称加密算法:RSA,DSAKeyPairGenerator kpg=KeyPairGenerator.getInstance(“RSA“);/制定密钥长度kpg.initialize(1024);/生成密钥对KeyPair kp=kpg.genKeyPair();PublicKey pbkey=kp.getPublic();PrivateKey prkey=kp.getPrivate();FileOutputStream f1=new FileOutputStream(“A/Skey_RSA_pub.dat“);ObjectOutputStream b1=new ObjectOutputS

9、tream(f1);b1.writeObject(pbkey);FileOutputStream f2=new FileOutputStream(“B/Skey_RSA_priv.dat“);ObjectOutputStream b2=new ObjectOutputStream(f2);b2.writeObject(prkey);/公钥加密package RSA;import java.security.interfaces.RSAPublicKey;import java.math.*;import java.io.*;public class Enc_RSA public static

10、void main(String args) throws ExceptionBufferedReader in=new BufferedReader(new InputStreamReader(new FileInputStream(“A/Key.dat“);String s=in.readLine();FileInputStream f=new FileInputStream(“A/Skey_RSA_pub.dat“);ObjectInputStream b=new ObjectInputStream(f);/公钥转换为RSA公钥RSAPublicKey pbk=(RSAPublicKey

11、)b.readObject();/获取公钥参数:公钥对应的整数e,用于取模的整数nBigInteger e=pbk.getPublicExponent();BigInteger n=pbk.getModulus();System.out.println(“e=“+e);System.out.println(“n=“+n);byte ptext=s.getBytes(“UTF8“);BigInteger m=new BigInteger(ptext);BigInteger c=m.modPow(e,n);System.out.println(“c=“+c);String cs=c.toStrin

12、g();BufferedWriter out=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(“Enc_RSA.dat“);out.write(cs,0,cs.length();out.close();/私钥解密package RSA;import java.security.interfaces.*;import java.math.*;import java.io.*;public class Dec_RSA public static void main(String args) throws Exceptio

13、nBufferedReader in=new BufferedReader (new InputStreamReader(new FileInputStream(“Enc_RSA.dat“);String ctext=in.readLine();BigInteger c=new BigInteger(ctext);FileInputStream f=new FileInputStream(“B/Skey_RSA_priv.dat“);ObjectInputStream b=new ObjectInputStream(f);RSAPrivateKey prk=(RSAPrivateKey)b.r

14、eadObject();BigInteger d=prk.getPrivateExponent();BigInteger n=prk.getModulus();System.out.println(“d=“+d);System.out.println(“n=“+n);BigInteger m=c.modPow(d, n);System.out.println(“m=“+m);bytemt=m.toByteArray();System.out.println(“Plain Text is“);for(int i=0;imt.length;i+)System.out.print(char)mti);FileOutputStream f1=new FileOutputStream(“B/Key.dat“);ObjectOutputStream b1=new ObjectOutputStream(f1);b1.writeObject(m);

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

当前位置:首页 > 企业管理 > 管理学资料

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


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

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

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