




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计说明书题目: 局域网内的文件传输-数字签名应用实例 院 系: 计算机科学与工程 专业班级: 信息安全11-2 学 号: 学生姓名: 指导教师: 2014年 12 月 14 日 安徽理工大学课程设计(论文)任务书 计算机 院系 计算机 教研室学 号 学生姓名 专业(班级) 设计题目局域网内的文件传输-数字签名应用实例设计技术参数(1)输入输出流,文件的读取, getInputStream, getOutputStream(2)RSA算法 PublicKey, PrivateKey等等(3)DES算法 getDesString等等(4)MD5算法 getMD5String等等(5)哈希函数设计要求(1)编写程序文件传递前先获取RSA加密过程中的私钥,公钥,使用hashcode()对文件进行数字签名,比较接收到的文件的哈希值,并进行与原文件的哈希值比较,若两个值相等则文件没有被修改,否则文件被修改。(2)如果可以的话,可以做成界面显示的。工作量 要求设计说明书的字数在3000字以上。工作计划2014.12.10 根据课程设计的要求,查找相关资料,完成需求分析;2014.12.11 进行系统的概要设计;2014.12.12 进行系统的详细设计和源代码的书写;2014.12.14 对系统进行调试分析,写出课程设计报告。参考资料1 郑莉编著.java语言程序设计(第二版).北京:清华大学出版社,2011.2 袁然等编著.java案例开发集锦.北京:电子工业出版社,2005.3 RSA算法原理(/link?url=f8FEWlbdvKOa3kk-LJDiYmAGcUStZwRF9ANC5aKVTq0Il4EsdR-zJtGOswfqFSBMktHLpkyTV0AsZt6UlzJOKg-pSwsF3e92FHAC5v2Np5q)4 百度文库-哈希算法(/view/3ecd005bbe23482fb4da4c12.html)5 百度文库-数字签名(/link?url=HDThPXnf41WG9m_uhk3V9Coc3FfDn0Sv4DV_7wxrKwCYtrr4_5v1xJ_MLfNZRifN8k3zmPVzWC-AtsHPjRjtY_)指导教师签字教研室主任签字2014年12月14日指导教师评语:成绩: 指导教师: 年 月 日安徽理工大学课程设计(论文)成绩评定表摘要 这个系统主要是想确保文件的完整性与安全性。在发送方与接收方之间进行文件的数字签名的认证。对于将要发送的文件计算出文件的MD5摘要值,对文件进行DES加密。把摘要值和DES密钥用RSA公钥加密以及给文件进行DES加密这都体现了安全性。另外,在接收端再一次的计算了文件的MD5摘要,并与接收来的MD5值相比较,用于验证文件的完整性。通过局域网内部使用数字签名系统,实现了内部信息的安全传输,同时保证了传输信息的完整性和不可否认性。关键词:安全性,完整性,摘要验证,数字签名目录121.问题描述11.1 问题的意义11.2 实验目的12.需求分析13.概要设计23.1RSA加密设计分析:23.2 数字签名的应用实例:34.详细设计44.2 实现RSA加密44.3 获取文件的HashCode74.4 实现MD5消息摘要74.5 文件的加密84.6 界面的设计95.调试分析95.1 关于设计的思考95.2 关于界面应用的问题96.用户手册107.测试结果108.设计体会12参考文献131. 问题描述1.1 问题的意义通过本程序了解各类加密算法的使用, 了解数字签名的步骤,在文件传输过程中实现对文件完整性的判断,对各类加密算法有更深一步的了解。(1) 加深对RSA,MD5算法的理解。(2) 对输入输出流掌握的更加熟练,对RSA,MD5的方法基本掌握。(3) 添加功能使得有界面,并且使得用户使用更加顺手。(4)了解局域网内数字签名的使用原理及其过程。1.2 实验目的(1) 了解RSA加密是的步骤。(2) 了解数字签名的步骤。(3) 使用数字签名完成对文件完整性的判断。2. 需求分析在现在社会中,局域网应用非常广泛,在局域网内进行文件传输时,用户不一定发现文件被修改,通过应用数字签名进行验证,我们可以确定文件在传输过程中是否被修改。通过比较传输前后文件的哈希值,可以看出文件文件是否被修改过,同时保证了信息的完整性和不可否认性。我们现在来模拟这种情况,使得数据在加密的过程中被传输, 然后我们更加深刻了解各类加密算法的应用场景。3. 概要设计3.1RSA加密设计分析: 数字签名是使用了公钥加密技术并用于鉴别数字信息的方法。简单地说,数字签名是附加在数据单元上的一些数据,或是对数据单元所作的密码变换。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被他人进行伪造。它是对电子形式的消息进行签名的一种方法,一个签名消息能在一个通信网络中传输。文件传输前,要先使用RSA算法获取明文文件的公钥和私钥,对明文文件进行加密,计算得到文件的哈希值,发送方对文件的哈希值进行签名,接收方接收文件之后,先进行数字签名的认证,若是收到的文件的哈希值与发送方发送文件的哈希值一致,则说明该文件是发送方发送的文件。消息摘要1Hash函数明文文件明文文件明文文件发送比 较数字签名数字签名Hash函数非对称加密算法 非对称加密算法 消息摘要2消息摘要签名者私钥签名者公钥签名验证图 1数字签名的流程图3.2 数字签名的应用实例: 假如现在 Alice 向 Bob 传送数字信息,为了保证信息传送的保密性、真实性、完整性和不可否认性,需要对传送的信息进行数字加密和签名,其传送过程为:1.Alice 准备好要传送的数字信息(明文);2.Alice 对数字信息进行哈希运算,得到一个信息摘要;3.Alice 用自己的私钥对信息摘要进行加密得到 Alice 的数字签名,并将其附在数字信息上;4.Alice 随机产生一个加密密钥,并用此密码对要发送的信息进行加密,形成密文;5.Alice 用 Bob 的公钥对刚才随机产生的加密密钥进行加密,将加密后的 DES 密钥连同密文一起传送给Bob;6.Bob 收到 Alice 传送来的密文和加密过的 DES 密钥,先用自己的私钥对加密的 DES 密钥进行解密,得到 Alice随机产生的加密密钥;7.Bob 然后用随机密钥对收到的密文进行解密,得到明文的数字信息,然后将随机密钥抛弃;8.Bob 用 Alice 的公钥对 Alice 的数字签名进行解密,得到信息摘要;9.Bob 用相同的哈希算法对收到的明文再进行一次哈希运算,得到一个新的信息摘要;10.Bob 将收到的信息摘要和新产生的信息摘要进行比较,如果一致,说明收到的信息没有被修改过。4. 详细设计4.1 加密算法独立封装类(1) MD5消息摘要的独立封装(2) RSA加密算法的独立封装(3) 文件哈希值算法的独立封装4.2 实现RSA加密 RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。RSA的算法涉及三个参数,n、e1、e2。其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod(p-1)*(q-1)=1。(n,e1),(n,e2)就是密钥对。其中(n,e1)为公钥,(n,e2)为私钥。RSA加解密的算法完全相同,设A为明文,B为密文,则:A=Be2 mod n;B=Ae1 mod n;(公钥加密体制中,一般用公钥加密,私钥解密)e1和e2可以互换使用,即:A=Be1 mod n;B=Ae2 mod n;开始输入a,b,caba baca c结束输出a图 2RSA算法的流程图在本次课程设计中,文件的数字签名是在index.java中实现的。在该类中实现了三个功能:1) 生成一对密钥,即公钥和私钥,对于密钥的保存可以使用对象流的方式进行保留和传送。2) 编写发送者的功能,首先通过私钥加密待输出数据Data,并输出Data和签名后的Data。3) 编写接受者的功能,使用发送者的公钥来验证发过来的Data,判断签名的合法性。在本次设计中,现将两个密钥作为属性封装在类RSAKey中,如下所示:public class RSAKey private String priKey; private String pubKey;/构造器 public RSAKey() public RSAKey(String priKey,String pubKey) this.priKey = priKey; this.pubKey = pubKey; /属性封装 public void setPriKey(String priKey) this.priKey=priKey; public String getPrikey() return this.priKey; public void setPubKey(String pubKey) this.pubKey=pubKey; public String getPubKey() return this.pubKey; 使用RSA加密获取了两个密钥pubKey,priKey:public class GenerateKeyPair public RSAKey Genenate() RSAKey rsa = new RSAKey();try java.security.KeyPairGenerator keygen = java.security.KeyPairGenerator.getInstance(RSA); SecureRandom secrand = new SecureRandom(); secrand.setSeed(21cn.getBytes(); / keygen.initialize(1024, secrand); KeyPair keys = keygen.genKeyPair(); PublicKey pubkey = keys.getPublic(); PrivateKey prikey = keys.getPrivate(); rsa.setPubKey(bytesToHexStr(pubkey.getEncoded(); rsa.setPriKey(bytesToHexStr(prikey.getEncoded(); System.out.println(pubKey= + rsa.getPubKey(); System.out.println(priKey= + rsa.getPrikey(); System.out.println(写入对象pubkeys ok); System.out.println(生成密钥对成功); return rsa; catch (java.lang.Exception e) e.printStackTrace(); System.out.println(生成密钥对失败); ; return null; /将字节数组转换为字符串public static final String bytesToHexStr(byte bcd) StringBuffer s = new StringBuffer(bcd.length * 2); for (int i = 0; i 4) & 0x0f); s.append(bcdLookupbcdi & 0x0f); return s.toString(); /将字符串转换为字节数组public static final byte hexStrToBytes(String s) byte bytes;bytes = new bytes.length() / 2; for (int i = 0; i bytes.length; i+) bytesi = (byte) Integer.parseInt(s.substring(2 * i, 2 * i + 2), 16); return bytes; private static final char bcdLookup = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f ; 4.3 获取文件的HashCode哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法。4.4 实现MD5消息摘要在介绍MD5算法之前,先介绍下哈希函数。哈希函数(HASH)的运算原理为:任意输入一个任何长度的任何字符串,通过哈希函数运算之后返回一串固定长度的字符串,该字符串即称为HASH值,用于计算哈希值的单向HASH函数将用于产生目标信息摘要。使用HASH函数主要可以解决两个问题:第一,我们无法从经过哈希函数产生的哈希值反向计算出运算前的信息原文;第二,无法查找两个经HASH操作后生成相同HASH值的不同原文。因此利用哈希函数,在数字签名中就可以解决验证签名和用户身份验证、不可抵赖性的问题。 由于信息摘要能简要地描述了一份较长的信息或文件,因此信息摘要被称为“数字指纹”。对于某一个文件原文,产生的信息摘要是唯一的。同时,也由于我们无法逆向计算出原文,信息摘要也就不怕被公开,即使公开,也无法得到原文信息。MD2,MD4和MD5算法就是一种被广泛使用的HASH函数,是由Ron Rivest 设计的专门用于加密处理的单散列函数,通过MD5算法运算之后将产生一个128位(16字节)的信息摘要,除非使用暴力破解,没能找到其他好的方法,而一般计算机运算能力暴力破解时间一般需要一千多年之久,因此MD5算法是一种优秀的加密算法。本次设计中使用的是MD5算法实现的:String inStr = this.jTextField4.getText();MessageDigest md5 = null;md5 = MessageDigest.getInstance(KEY_ALGORITHM);char charArray = inStr.toCharArray();byte byteArray = new bytecharArray.length;for (int i = 0; i charArray.length; i+) byteArrayi = (byte) charArrayi;byte md5Bytes = md5.digest(byteArray);StringBuffer hexValue = new StringBuffer();for (int i = 0; i md5Bytes.length; i+) int val = (int) md5Bytesi) & 0xff; if (val 16) hexValue.append(0); hexValue.append(Integer.toHexString(val); this.jTextField5.setText(hexValue.toString();4.5 文件的加密这里文件的加密是比较简单的,主要就是文件的输出和输入,主要就是利用java中常用的一些I/O流中包含的一些函数,例如hashCode(),setSeed(),genKeyPair(),getPublic(),getPrivate()函数等,还有一些主要的类例如BufferedReader,FileReader类等。4.6 界面的设计在这里的界面设计中,我只设计了一个界面如下图3所示,在该界面中,将数字签名的步骤完整的显示出来。第一步:使用RSA算法得到私钥和公钥;第二步:选择要传输的文件;第三步:获取该文件的哈希值;第四步:对该文件的哈希值进行签名;第五步:选择接收到的文件;第六步:获取该接收到的文件的哈希值;第七步:比较两个哈希值是否一致;5. 调试分析5.1 关于设计的思考我觉在进行编写代码是应该尽力避免代码的冗余性,一些经常使用到的功能应该进行封装,以便我们在编写代码过程中的调用,我们应尽量减少代码量,达到以最少的代码实现我们所要达到的功能,在创建类时应将类中的数据成员尽可能的进行封装,保证了数据的安全性。5.2 关于界面应用的问题在这次设计中,界面可以说是最简单明了的,我使用了NetBeans IDE 8.0软件实现的。在该软件中很多代码都是自动生成的,所以说代码有一定的冗余性,但是具体的功能都一一实现了。6. 用户手册1 首先是运行环境的配置:jdk 1.8 + NetBeans IDE 8.0 2 设计界面3 编写代码 4 运行程序5. 程序运行后,就可以进行数字签名了7. 测
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 轨道交通施工方案在哪找
- 徐州开土方外运施工方案
- 机械送料机选购方案范本
- 2025建筑混凝土材料购销合同范本
- 2025年上海建筑工程分包合同协议书
- 竞标方案合同范本
- 交通安全员考试题库真题及答案解析
- 安全科学原理期末测试题及答案解析
- 冬季pe管热熔施工方案
- 2025年古代贵族考试题目及答案
- 清华大学实验室安全教育考试题库(全)
- 项目经理(总监)解锁申请表
- 物业管理存在的问题与对策
- 前列腺等离子电切术护理查房
- 儿童神经心理行为发育
- GB/T 4074.8-2009绕组线试验方法第8部分:测定漆包绕组线温度指数的试验方法快速法
- GB/T 19812.3-2017塑料节水灌溉器材第3部分:内镶式滴灌管及滴灌带
- GB/T 1682-1994硫化橡胶低温脆性的测定单试样法
- 企业消防安全基础知识培训讲义课件
- 商务英语翻译实务完整版教学ppt课件全套教程
- 第五章-中药指纹图谱课件
评论
0/150
提交评论