仿真实验室实验报告.doc

上传人:文库蛋蛋多 文档编号:3080261 上传时间:2023-03-10 格式:DOC 页数:10 大小:213.50KB
返回 下载 相关 举报
仿真实验室实验报告.doc_第1页
第1页 / 共10页
仿真实验室实验报告.doc_第2页
第2页 / 共10页
仿真实验室实验报告.doc_第3页
第3页 / 共10页
仿真实验室实验报告.doc_第4页
第4页 / 共10页
仿真实验室实验报告.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《仿真实验室实验报告.doc》由会员分享,可在线阅读,更多相关《仿真实验室实验报告.doc(10页珍藏版)》请在三一办公上搜索。

1、广 州 大 学实 验 报 告学 院 商学院 专业、班级 电子商务091 姓名、学号 庄泽帆 0901080028 课程名称 电子商务安全与管理 项目名称 数字签名实验 实验时间: 2011年 11 月 23 日 数字签名实验 实验报告开课实验室:仿真实验室2011年11月23日学院商学院年级、专业、班电商091姓名庄泽帆成绩课程名称电子商务安全与管理实验项目名 称数字签名实验指导教师签名一、实验目的电子商务和电子贸易的迅猛发展,使得因特网以及网络的安全问题越来越受到关注。本次实验将对电子商务常用的软件平台(Java 2)平台下的加密及解密方法进行验证,通过本次实验具体要达到的实验目的如下:1.

2、 数字签名的基本原理,理解数字签名的作用;2. 掌握数字摘要算法的基本原理3. 掌握Java 2平台下的数字签名算法的实现;二、实验内容1. 熟悉Java SDK中数字摘要算法API的用法;2. 计算一个文件的摘要;3. 对计算出的摘要进行数字签名;4. 对数字签名进行验证三、实验原理1. 数字签名的原理图2. 数字签名的处理过程 使用摘要函数对信息进行编码将发送文件加密产生128bit(或160bit)的数字摘要; 发送方用自己的专用密钥对摘要再加密,形成数字签名; 将原文和加密的摘要同时传给对方; 接收方用发送方的公共密钥对摘要解密,同时对收到的文件用摘要函数产生同一摘要; 将解密后的摘要

3、和收到的文件在接受方重新加密产生的摘要相互对比,如果两者一致,则说明在传送过程中信息没有破坏和篡改。否则,则说明信息已经失去安全性和保密性。b) 基于RSA的数字签名算法3. Java对数字签名算法的支持 KeyPairGenerator由于RSA算法是基于大素数分解数学难题的,因此该算法的主要问题是要产生一对大素数。KeyPairGenerator是一个用于产生RSA加密体制中的公钥和私钥对的引擎 . PublicKeyPublicKey类封装了RSA算法中的公钥(一个大素数)。 PrivateKey PrivateKey类封装了RSA算法中的私钥(一个大素数) MessageDigest类

4、该类提供了对各种摘要算法的支持 Cipher类该类实现了对对称加密带来解密算法的支持。单步加密时使用Cipher类中的doFinal()方法;多步加密时则要联合使用Cipher中的update()方法和doFinal()方法。四、实验过程原始记录(数据、图表、计算等)五、实验结果及分析经过数字签名,加密前与加密后的摘要相一致,并且密文发生改变后摘要也相应改变了,实验成功。六、附录(自己实现的源代码)import java.io.*;import java.math.BigInteger;import java.security.*;import java.security.KeyFactory

5、;import java.security.interfaces.*;import java.security.spec.*;import javax.crypto.*;public class Rsa public static void main(String args) throws IOException,NoSuchAlgorithmException, InvalidKeySpecException,NoSuchPaddingException, InvalidKeyException,IllegalBlockSizeException, BadPaddingException /

6、 从c:/keypair.dat中读取n,e,dFileInputStream is = new FileInputStream(c:keypair.txt);BufferedInputStream bis = new BufferedInputStream(is);int rn = bis.read();byte arr_n = new bytern;bis.read(arr_n);rn = bis.read();byte arr_e = new bytern;bis.read(arr_e);rn = bis.read();byte arr_d = new bytern;bis.read(a

7、rr_d);/ 输出n,e,d与文件中的n,e,d进行对比BigInteger n = new BigInteger(arr_n);BigInteger e = new BigInteger(arr_e);BigInteger d = new BigInteger(arr_d);System.out.println(n: + n);System.out.println(e: + e);System.out.println(d: + d);BigInteger modulus = new BigInteger(arr_n);BigInteger publicExponent = new BigI

8、nteger(arr_e);BigInteger privateExponent = new BigInteger(arr_d);/ 生成公钥KeyFactory keyFac = KeyFactory.getInstance(RSA);RSAPublicKeySpec rsaPublicKeySpec = new RSAPublicKeySpec(modulus,publicExponent);RSAPublicKey puKey = (RSAPublicKey) keyFac.generatePublic(rsaPublicKeySpec);/ 生成私钥keyFac = KeyFactor

9、y.getInstance(RSA);RSAPrivateKeySpec rsaPrivateKeySpec = new RSAPrivateKeySpec(modulus,privateExponent);RSAPrivateKey prKey = (RSAPrivateKey) keyFac.generatePrivate(rsaPrivateKeySpec);/ Create the cipherCipher rsaCipher = Cipher.getInstance(RSA);/ 读取摘要MessageDigest alga = MessageDigest.getInstance(S

10、HA);/ 添加要进行计算摘要的信息,注意了source.text里面是要进行加密的信息FileWriter write = new FileWriter(c:source.txt);write.write(EC在美国也才刚刚开始,之所以把EC列为一个划时代的东西,笔者认为,是因为Internet的最终主要商业用途,就是电子商务。);write.close();FileInputStream i1 = new FileInputStream(c:source.txt);int len = i1.read();byte info = new bytelen;alga.update(info);F

11、ileOutputStream os = new FileOutputStream(C:digitaliginature.dat);DataOutputStream bos = new DataOutputStream(os);/ 得到加密前摘要byte jaimiqian = alga.digest();/ 用公钥对摘要进行加密,发现每次加密密文都会改变rsaCipher.init(Cipher.ENCRYPT_MODE, puKey);byte jaimihou = rsaCipher.doFinal(jaimiqian);System.out.println(用公钥加密的密文: + To

12、ols.toHexString(jaimihou);bos.writeBytes(用公钥加密的密文: + jaimihou+n);/ 用私钥对密文进行解密rsaCipher.init(Cipher.DECRYPT_MODE, prKey);byte jeimihou = rsaCipher.doFinal(jaimihou);System.out.println(用公钥加密前摘要: + Tools.toHexString(jaimiqian);bos.writeBytes(用公钥加密前摘要: + jaimiqian+n);System.out.println(用私钥解密后摘要: + Tools

13、.toHexString(jeimihou);待添加的隐藏文字内容3bos.writeBytes(用私钥解密后摘要: + jeimihou+n);/ 用私钥对摘要进行加密,发现不管加密多少次,密文都不变rsaCipher.init(Cipher.ENCRYPT_MODE, prKey);byte jaimihou1 = rsaCipher.doFinal(jaimiqian);System.out.println(用私钥加密的密文: + Tools.toHexString(jaimihou1);bos.writeBytes(用私钥加密的密文: + jaimihou1+n);/ 用公钥对密文进行

14、解密rsaCipher.init(Cipher.DECRYPT_MODE, puKey);byte jeimihou1 = rsaCipher.doFinal(jaimihou1);System.out.println(用私钥加密前摘要: + Tools.toHexString(jaimiqian);bos.writeBytes(用私钥加密前摘要: + jaimiqian+n);System.out.println(用公钥解密后摘要: + Tools.toHexString(jeimihou1);bos.writeBytes(用公钥解密后摘要: + jeimihou1+n);bos.close

15、();FileWriter writer=new FileWriter(c:source.txt);writer.write(This is a text!);writer.close();int len1 = i1.read();byte info1 = new bytelen1;alga.update(info1);/ 得到加密前摘要byte jaimiqian2 = alga.digest();/ 用公钥对摘要进行加密,发现每次加密密文都会改变rsaCipher.init(Cipher.ENCRYPT_MODE, puKey);byte jaimihou2 = rsaCipher.doF

16、inal(jaimiqian2);System.out.println(文件篡改后用公钥加密的密文: + Tools.toHexString(jaimihou2);/ 用私钥对密文进行解密rsaCipher.init(Cipher.DECRYPT_MODE, prKey);byte jeimihou2 = rsaCipher.doFinal(jaimihou2);System.out.println(文件篡改后用公钥加密前摘要: + Tools.toHexString(jaimiqian2);System.out.println(文件篡改后用私钥解密后摘要: + Tools.toHexStri

17、ng(jeimihou2);/ 用私钥对摘要进行加密,发现不管加密多少次,密文都不变rsaCipher.init(Cipher.ENCRYPT_MODE, prKey);byte jaimihou3 = rsaCipher.doFinal(jaimiqian2);System.out.println(文件篡改后用私钥加密的密文: + Tools.toHexString(jaimihou3);/ 用公钥对密文进行解密rsaCipher.init(Cipher.DECRYPT_MODE, puKey);byte jeimihou3 = rsaCipher.doFinal(jaimihou3);Sy

18、stem.out.println(文件篡改后用私钥加密前摘要: + Tools.toHexString(jaimiqian2);System.out.println(文件篡改后用公钥解密后摘要: + Tools.toHexString(jeimihou3);class Tools public static String toHexString(byte block) StringBuffer buf = new StringBuffer();int len = block.length;for (int i = 0; i len; i+) byte2hex(blocki, buf);if (

19、i 4);int low = (b & 0x0f);buf.append(hexCharshigh);buf.append(hexCharslow);public static void hex2byte(String buf, byte block) byte high, low;int len = buf.length();byte ch = buf.getBytes();for (int i = 0; i len / 2; i+) high = (byte) (chi * 2 4);low = (byte) (chi * 2 + 1 & 0x0f);blocki = (byte) (high + low);

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

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号