ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:136.86KB ,
资源ID:11437593      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11437593.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实习二数字签名与认证的实现.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实习二数字签名与认证的实现.docx

1、实习二 数字签名与认证的实现实习二 数字签名与认证的实现一、实习目的1理解数字签名的概念和作用;2理解身份认证的基本方式和方法;3掌握Hash函数和数字签名的实现。二、实习要求1实习前认真预习第3章的有关内容;2复习数字签名和身份认证相关内容;3熟悉Java平台的JCE包有关类。三、 实习内容假定两个用户A、B,他们的公私钥对分别是KPUa、KPRa和KPUb、KPRb,分发的消息为M,哈希函数h(x)。请基于RSA算法实现数字签名,阶梯任务如下:以本地两个目录模拟两个用户,实现消息M和签名的模拟分发;实现过程:A将信息M用自己的私钥加密后与M本身一起发送给B,B将签名用A的公钥解密,得出的信

2、息与M对比,如果一致,说明消息就是A发的,因为只有A知道自己的私钥。运行结果:以MD5、SHA-1等哈希函数,实现消息M的摘要,实现M及摘要签名的模拟分发;实现过程:A对消息M用散列函数求出摘要,再用自己的私钥对摘要进行签名,将摘要和摘要的签名一起发送给B,B接受后用A的公钥解密摘要签名,将得出的摘要与发送的摘要对比,判断是否是A发送的。MD5:SHA-1:实现M密文状态下的签名与模拟分发;实现过程:A对消息M用B的公钥进行加密,将密文用散列函数求出摘要,再用自己的私钥对摘要进行签名,将密文摘要和摘要的签名一起发送给B,B接受后用A的公钥解密摘要签名,将得出的摘要与发送的摘要对比,判断是否是A

3、发送的,之后再使用自己的私钥解密得到的密文,最终得到明文消息M。运行结果:采用SSL,建立安全通信过程,实现Socket通信的签名分发;将方案移植到某个web应用中,实现实用的签名分发。4、实验总结 通过这次实验,对于数字签名的方式有了更多了解,认识到非对称密钥体系真的是一个很好的体系,既可以做签名,也可以进行加解密,功能很多。附代码:SKey_RSA.javapackage cn.test.key;import java.io.FileOutputStream;import java.io.ObjectOutputStream;import java.security.KeyPair;imp

4、ort java.security.KeyPairGenerator;import java.security.NoSuchAlgorithmException;import java.security.PrivateKey;import java.security.PublicKey;public class SKey_RSA public void key_RSA() throws Exception KeyPairGenerator kpg = KeyPairGenerator.getInstance(RSA); kpg.initialize(1024); KeyPair kp = kp

5、g.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); ObjectOutpu

6、tStream 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.FileOutput

7、Stream;import java.io.InputStreamReader;import java.io.ObjectInputStream;import java.io.OutputStreamWriter;import java.math.BigInteger;import java.security.Key;import java.security.interfaces.RSAPrivateKey;import java.security.interfaces.RSAPublicKey;public class Rsa_Op int flag = 0; public byte enc

8、_pub(String s) throws Exception byte 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(

9、); 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(ne

10、w OutputStreamWriter(new FileOutputStream(Enc_pub_RSA1.dat); bw.write(cs, 0, cs.length(); bw.close(); return re; public void enc_pri(String s) throws Exception byte b = s.getBytes(UTF8); FileInputStream f = new FileInputStream(Skey_RSA_pri1.dat); ObjectInputStream oi = new ObjectInputStream(f); RSAP

11、rivateKey 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

12、(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 Exception BufferedReader br

13、= 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 = (RSAPriva

14、teKey)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_

15、pub() throws Exception BufferedReader 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 ObjectInpu

16、tStream(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.

17、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 java.security.interfaces.RSAPrivateKey;

18、public class Sig public void sigNoz(String s,Rsa_Op ro) throws Exception SKey_RSA sr = new SKey_RSA(); sr.key_RSA(); ro.enc_pri(s); public void sigWithz(String algorithm,String msg) throws Exception FileInputStream f = new FileInputStream(Skey_RSA_pri1.dat); ObjectInputStream oi = new ObjectInputStr

19、eam(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

20、FileOutputStream(Sign.dat); f3.write(b1); public void sigWithz(String algorithm,byte msg) throws Exception FileInputStream f = new FileInputStream(Skey_RSA_pri1.dat); ObjectInputStream oi = new ObjectInputStream(f); RSAPrivateKey prk = (RSAPrivateKey)oi.readObject(); oi.close(); Signature s=Signatur

21、e.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

22、.io.FileNotFoundException;import java.io.ObjectInputStream;import java.security.Signature;import java.security.interfaces.RSAPublicKey;public class Dec_Sig public String dec_SigNoz(Rsa_Op ro) throws Exception byte ss = ro.dec_pub(); String s = new String(ss,UTF8); return s; public boolean dec_SigWit

23、hz(String msg,String algorithm) throws Exception byte 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);

24、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 Exception FileInputStream f2=new FileInputStream(Sign.dat); in

25、t 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); boo

26、lean 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 stub FileReader f = new FileReader(消息M.txt); BufferedReader br =new B

27、ufferedReader(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.

28、BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;public class Test2 public static void main(String args) throws Exception / TODO Auto-generated method stub SKey_RSA sr = new SKey_RSA(); sr.key_RSA(); FileReader f = new FileReader(消息M.txt); BufferedReader br =new Buffered

29、Reader(f); String ss = br.readLine(); Rsa_Op ro =new Rsa_Op(); Sig s = new Sig(); System.out.println(使用SHA-1算法生成摘要); s.sigWithz(SHA1WithRSA, ss); Dec_Sig ds = new Dec_Sig(); boolean ok = ds.dec_SigWithz(ss, SHA1WithRSA); if(ok=true) System.out.println(); System.out.println(验证签名成功!); Test3.java:package cn.test.key;import java.io.BufferedReader;import java.io.FileReader;public class Test3 /* * param args * throws Exception */ pub

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1