已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.实习二 数字签名与认证的实现一、实习目的1理解数字签名的概念和作用;2理解身份认证的基本方式和方法;3掌握Hash函数和数字签名的实现。二、实习要求1实习前认真预习第3章的有关内容;2复习数字签名和身份认证相关内容;3熟悉Java平台的JCE包有关类。三、 实习内容假定两个用户A、B,他们的公私钥对分别是KPUa、KPRa和KPUb、KPRb,分发的消息为M,哈希函数h(x)。请基于RSA算法实现数字签名,阶梯任务如下:以本地两个目录模拟两个用户,实现消息M和签名的模拟分发;实现过程:发送接收方BMM的签名发送方A消息明文MA的私钥加密MM的签名A的公钥解密对比是否是A发送的A将信息M用自己的私钥加密后与M本身一起发送给B,B将签名用A的公钥解密,得出的信息与M对比,如果一致,说明消息就是A发的,因为只有A知道自己的私钥。运行结果:以MD5、SHA-1等哈希函数,实现消息M的摘要,实现M及摘要签名的模拟分发;实现过程:接收方B发送送摘要摘要签名A的公钥解密对比是否是A发送的散列函数求摘要摘要摘要签名消息明文MA的私钥加密A对消息M用散列函数求出摘要,再用自己的私钥对摘要进行签名,将摘要和摘要的签名一起发送给B,B接受后用A的公钥解密摘要签名,将得出的摘要与发送的摘要对比,判断是否是A发送的。MD5:SHA-1:实现M密文状态下的签名与模拟分发;实现过程:B的私钥解密接收方B摘要摘要签名A的公钥解密对比是否是A发送的发送送散列函数求摘要摘要摘要签名消息明文MA的私钥加密密文B的公钥加密明文MA对消息M用B的公钥进行加密,将密文用散列函数求出摘要,再用自己的私钥对摘要进行签名,将密文摘要和摘要的签名一起发送给B,B接受后用A的公钥解密摘要签名,将得出的摘要与发送的摘要对比,判断是否是A发送的,之后再使用自己的私钥解密得到的密文,最终得到明文消息M。运行结果:采用SSL,建立安全通信过程,实现Socket通信的签名分发;将方案移植到某个web应用中,实现实用的签名分发。4、 实验总结 通过这次实验,对于数字签名的方式有了更多了解,认识到非对称密钥体系真的是一个很好的体系,既可以做签名,也可以进行加解密,功能很多。附代码:SKey_RSA.javapackage cn.test.key;import java.io.FileOutputStream;import java.io.ObjectOutputStream;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.NoSuchAlgorithmException;import java.security.PrivateKey;import java.security.PublicKey;public class SKey_RSA public void key_RSA() throws ExceptionKeyPairGenerator kpg = KeyPairGenerator.getInstance(RSA);kpg.initialize(1024);KeyPair kp = kpg.genKeyPair();PublicKey pbkey = kp.getPublic();PrivateKey prkey = kp.getPrivate();FileOutputStream f1 = new FileOutputStream(Skey_RSA_pub1.dat);ObjectOutputStream oo1 = new ObjectOutputStream(f1);oo1.writeObject(pbkey);FileOutputStream f2 = new FileOutputStream(Skey_RSA_pri1.dat);ObjectOutputStream oo2 = new ObjectOutputStream(f2);oo2.writeObject(prkey);oo1.close();oo2.close();f1.close();f2.close();Rsa_Op.javapackage cn.test.key;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.InputStreamReader;import java.io.ObjectInputStream;import java.io.OutputStreamWriter;import java.math.BigInteger;import java.security.Key;import erfaces.RSAPrivateKey;import erfaces.RSAPublicKey;public class Rsa_Op int flag = 0;public byte enc_pub(String s) throws Exceptionbyte b = s.getBytes(UTF8);FileInputStream f = new FileInputStream(Skey_RSA_pub1.dat);ObjectInputStream oi = new ObjectInputStream(f);RSAPublicKey pbk = (RSAPublicKey)oi.readObject();oi.close();BigInteger e = pbk.getPublicExponent();BigInteger n = pbk.getModulus();BigInteger m = new BigInteger(b);BigInteger m1 = new BigInteger(0);if(pareTo(m1)=-1)m = m.negate();flag = 1;BigInteger c = m.modPow(e, n);System.out.println(M用公钥加密后的密文:);System.out.println(c=+c);byte re = c.toByteArray();String cs = c.toString();BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(Enc_pub_RSA1.dat);bw.write(cs, 0, cs.length();bw.close();return re;public void enc_pri(String s) throws Exceptionbyte b = s.getBytes(UTF8);FileInputStream f = new FileInputStream(Skey_RSA_pri1.dat);ObjectInputStream oi = new ObjectInputStream(f);RSAPrivateKey prk = (RSAPrivateKey)oi.readObject();oi.close();BigInteger e = prk.getPrivateExponent();BigInteger n = prk.getModulus();BigInteger m = new BigInteger(b);System.out.println(签名前的M=+m);BigInteger m1 = new BigInteger(0);if(pareTo(m1)=-1)m = m.negate();flag = 1;BigInteger c = m.modPow(e, n);System.out.println(签名后的M=+c);/System.out.println(将密钥加密后的密文c=+c);String cs = c.toString();BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(Enc_pri_RSA1.dat);bw.write(cs, 0, cs.length();bw.close();public byte dec_pri() throws ExceptionBufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(Enc_pub_RSA1.dat);String ctext = br.readLine();br.close();BigInteger c = new BigInteger(ctext);FileInputStream f = new FileInputStream(Skey_RSA_pri1.dat);ObjectInputStream oi = new ObjectInputStream(f);RSAPrivateKey prk = (RSAPrivateKey)oi.readObject();BigInteger d = prk.getPrivateExponent();BigInteger n = prk.getModulus();BigInteger m = c.modPow(d, n);if(flag = 1)m = m.negate();flag = 0;System.out.println(将c解密后得: );System.out.println(m=+m);byte mt = m.toByteArray();oi.close();f.close();return mt;public byte dec_pub() throws ExceptionBufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(Enc_pri_RSA1.dat);String ctext = br.readLine();br.close();BigInteger c = new BigInteger(ctext);FileInputStream f = new FileInputStream(Skey_RSA_pub1.dat);ObjectInputStream oi = new ObjectInputStream(f);RSAPublicKey pbk = (RSAPublicKey)oi.readObject();BigInteger d = pbk.getPublicExponent();BigInteger n = pbk.getModulus();BigInteger m = c.modPow(d, n);if(flag = 1)m = m.negate();flag = 0;System.out.println(公钥解密后的M=+m);byte b = m.toByteArray();oi.close();f.close();return b;Sig.java:package cn.test.key;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.io.ObjectInputStream;import java.security.NoSuchAlgorithmException;import java.security.Signature;import erfaces.RSAPrivateKey;public class Sig public void sigNoz(String s,Rsa_Op ro) throws ExceptionSKey_RSA sr = new SKey_RSA();sr.key_RSA();ro.enc_pri(s);public void sigWithz(String algorithm,String msg) throws ExceptionFileInputStream f = new FileInputStream(Skey_RSA_pri1.dat);ObjectInputStream oi = new ObjectInputStream(f);RSAPrivateKey prk = (RSAPrivateKey)oi.readObject();oi.close();Signature s=Signature.getInstance(algorithm); s.initSign(prk);byte b = msg.getBytes(UTF8);s.update(b);byte b1 = s.sign();System.out.println(摘要签名:);for(int i=0;ib1.length;i+)System.out.print(b1i+,);FileOutputStream f3=new FileOutputStream(Sign.dat); f3.write(b1); public void sigWithz(String algorithm,byte msg) throws ExceptionFileInputStream f = new FileInputStream(Skey_RSA_pri1.dat);ObjectInputStream oi = new ObjectInputStream(f);RSAPrivateKey prk = (RSAPrivateKey)oi.readObject();oi.close();Signature s=Signature.getInstance(algorithm); s.initSign(prk);s.update(msg);byte b1 = s.sign();System.out.println(密文摘要签名:);for(int i=0;ib1.length;i+)System.out.print(b1i+,);FileOutputStream f3=new FileOutputStream(Sign.dat); f3.write(b1); Dec_Sig.java:package cn.test.key;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.ObjectInputStream;import java.security.Signature;import erfaces.RSAPublicKey;public class Dec_Sig public String dec_SigNoz(Rsa_Op ro) throws Exceptionbyte ss = ro.dec_pub();String s = new String(ss,UTF8);return s;public boolean dec_SigWithz(String msg,String algorithm) throws Exceptionbyte data = msg.getBytes(UTF8);FileInputStream f2=new FileInputStream(Sign.dat); int num = f2.available();byte b = new bytenum;f2.read(b);FileInputStream f = new FileInputStream(Skey_RSA_pub1.dat);ObjectInputStream oi = new ObjectInputStream(f);RSAPublicKey pbk = (RSAPublicKey)oi.readObject();Signature s=Signature.getInstance(algorithm); s.initVerify(pbk);s.update(data);boolean result = s.verify(b);return result;public boolean dec_SigWithz(byte msg,String algorithm) throws ExceptionFileInputStream f2=new FileInputStream(Sign.dat); int num = f2.available();byte b = new bytenum;f2.read(b);FileInputStream f = new FileInputStream(Skey_RSA_pub1.dat);ObjectInputStream oi = new ObjectInputStream(f);RSAPublicKey pbk = (RSAPublicKey)oi.readObject();Signature s=Signature.getInstance(algorithm); s.initVerify(pbk);s.update(msg);boolean result = s.verify(b);return result;Test1.java:package cn.test.key;import java.io.BufferedReader;import java.io.FileReader;public class Test1 public static void main(String args) throws Exception / TODO Auto-generated method stubFileReader f = new FileReader(消息M.txt);BufferedReader br =new BufferedReader(f);String ss = br.readLine();Rsa_Op ro =new Rsa_Op();Sig s = new Sig();s.sigNoz(ss,ro);Dec_Sig ds = new Dec_Sig();String decs = ds.dec_SigNoz(ro);System.out.println(签名解密后得到的消息M=+decs);if(ss.equals(decs)System.out.println(验证签名成功!);Test2.java:package cn.test.key;import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;public class Test2 public static void main(String args) throws Exception / TODO Auto-generated method stubSKey_RSA sr = new SKey_RSA();sr.key_RSA();FileReader f = new FileReader(消息M.txt);BufferedReader br =new BufferedReader(f);String ss = br.readLine();Rsa_Op ro =new Rsa_Op();Sig
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政府采购培训协议书
- 采矿外包安全协议书
- 彩钢更换协议书
- 终止销售协议书范本
- 财产协议书归属公证
- 2025年风电项目自然保护区调查考核试卷
- 2025年健康保健行业健康管理智能设备研究报告及未来发展趋势预测
- 2025年基层医疗服务能力提升-医疗纠纷(预防、处理)流程与技巧考核试卷
- 工业绿色供应链逆向物流管理考核试卷
- 2025年高速铁路旅客运输服务质量标准考核试卷
- 北师大版数学七年级上册期中综合能力测评卷(含解析)
- 农业经理人考试题库四级及答案
- 2025年入团考试知识总结试题及答案
- 2025年健康险行业分析报告及未来发展趋势预测
- JJF 2291-2025辉光放电质谱仪校准规范
- 出租注册地址合同范本
- 统编版(2024)三年级上册道德与法治第二单元 爱科学 学科学 教案(4-6课)
- GB/T 24460-2025太阳能光伏照明装置总技术规范
- 2025年通信技术公司工作人员招聘考试笔试试题(附答案)
- 生态城市绿色建筑协同-洞察与解读
- 安全标识标识化设计标准方案
评论
0/150
提交评论