




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
院 系: 计算机科学学院 专 业: 网络工程产业班 年 级: 2013 课程名称: 信息安全 学 号: 201321093022 姓 名: 刘浏 指导教师: 孟博 2016年 6 月 6 日年级2013级班号产业班学号201321093022专业网络工程姓名刘浏实验名称Enigma密码算法实验类型设计型综合型创新型实验目的或要求通过使用Enigma密码模拟器,加深对古典密码体制的了解,为深入学习现代密码学奠定基础。实验原理(算法流程)(1)消息的发送着利用Enigma模拟器进行下列操作:明文:INFORMATION SECURITY模拟器参数设置:UKW: BWalzen: I II VRingstellung: F-06 V-22 N-14 Stecker: BG CD ER FV HN IU JK LM OP TY生成:在转子的起始位置:XWB,生成INFORMATION SECURITY的密文;同时给出模拟器在此结果时的屏幕截图。写不完时,可另加附页。)然后把转子的起始位置设为ABC,求出XWB的密文;同时给出模拟器在此结果时的屏幕截图。 最后把模拟器参数设置,转子的起始位置ABC,XWB的密文,INFORMATION SECURITY的密文发送给接收者。发送内容:PPX CTIZJ OCYNE EEADH HAVE(2)接收者收到信息后:对XWB 的密文,INFORMATION SECURITY的密文进行解密,给出明文,并且分别给出相应的屏幕截图。明文为:INFORMATION SECURITY组内分工(可选)实验结果分析及心得体会在这次实验过程中,我们需要选定好实验所需的Ringstellung,再按照要求设置好Stecker,虽然都是对软件的一个操作,但这些条件都影响着后面消息的加密方式和产生结果,所以它们都是实验成功的必要条件。通过这次实验,我了解了Enigma密码的历史和加深对古典密码体制的了解,为深入学习现代密码学奠定基础。同时理解了Enigma密码的原理,在此基础上掌握Enigma密码模拟器的使用方法。已可以使用Enigma密码模拟器进行加密和解密。成绩评定教师签名: 年 月 日备注:源代码附后,源代码要求有注释说明年级2013级班号产业班学号201321093022专业网络工程姓名刘浏实验名称基于RSA的数字签名实现实验类型设计型综合型创新型实验目的或要求掌握RSA算法的基本原理,通过用RSA算法对实际数据进行加密和解密来深刻了解RSA的运行原理。对数字签名有所了解,理解和掌握SHA512算法,以及如何利用RSA和SHA512算法来实现数字签名。实验原理(算法流程)1、RSA算法的基本原理: 独立地选取两个大素数(保密)。 计算=(公开),其中 n 为欧拉函数值 = 1 1 (保密)。 随机选取一整数e,满足1 , , =1,e是公开的密钥即公钥。 用Euclid算法计算d,=1mod ,d是保密的密钥即私钥。 加密变换:对明文,密文为= =mod 。 解密变换:对密文,明文为= =mod 。 其中,加密变换、解密变换两步也可以改为用d加密,e解密,就变成签名和验证过程。2、SHA-512算法过程:对于SHA-512,在完成填充等预处理后,每个消息分组依次执行以下计算:步骤1:准备处理字Wt步骤2:用每一轮的杂凑值中间结果初始化8个工作变量:A、B、C、D、E、F、G和H。初始值定义由H0 H7给出。步骤3:对于(写不完时,可另加附页。)各部分的设计实现1)密钥产生的实现在密钥的产生部分中起决定性作用的是素数的选择,对随机数作素性检测,若通过则为素数;否则增加一个步长后再做素性检测,直到找出素数。素性检测采用Fermat测试。这个算法的理论依据是费尔马小定理:如果m是一个素数,且a不是m的倍数,那么根据费尔马小定理有:a m-1=1 ( mod m)。 实际应用时:a m-1 = 1 ( mod m) a m = a ( mod m) a= a m ( mod m), 因此对于整数m,只需计算a m ( mod m),再将结果与a比较,如果两者相同,则m为素数。选取a=2,则a一定不会是任何素数的倍数。根据所选的素数的不同产生不同的密钥。密钥的理论产生模块流程图产生任意素数p和q计算n=p*q计算ou_la=(p-1)(q-1)选择e作为公钥计算d作为私钥2)产生消息摘要的设计实现计算消息摘要的理论实现流程图初始化MD5所需的常量计算所需的追加长度对原始信息进行补位将输入分成512位的块循环处理块得到消息摘要在以上流程图中其中循环处理块是最重要的一步,也是MD5的核心算法,在这一步中包括了:(1)把四个连接变量复制到了四个变量a,b,c,d中,使a=A,b =B,c =C,d=D;其中a,b,c,d组合成128位的寄存器,且在实际算法运算中保存中间结果和最终结果;(2)将当前的512位块分解为16个子块,每个子块为32位;(3)要循环四轮,每一轮处理一个块中的16个子块,四轮的第一步进行不同的处理,其他的相同:每一轮有16个输入子块M0,M1,.M15,或表示为Mi,其中i为0-15;t是常量数组,包含64个元素,每个元素为32位,数组t表示为t1,t2,t64,或tk,k为1-64;3)数字签名的设计实现数字签名的理论实现流程图如图所示,数字签名,就是通过在数据单元上附加数据,或对数据单元进行加密变换,从而使接收者可以确认数据来源和完整性。数字签名是防止他人对传输的文件进行破坏,以及确定发信人的身份的手段。数字签名中的加密算法就是应用的RSA加密原理,而它的验证算法则是应用的RSA解密原理。开始得到数字签名得到消息摘要MD用私钥d 加密MD结束RSA的加密、解密过程都为求一个整数的整数次幂,再取模。如果按其含义直接计算,则中间结果非常大,有可能超出计算机所允许的整数取值范围。为了减小中间结果和提高加、解密运算中指数运算的有效性,本设计采用了快速指数算法。它的运算过程为(假如要算am mod n):1)将m表示为二进制的形式;2)初始化c=0,d=1,c在这里表示指数的部分结果,它的终值即为指数m,d是中间结果,它的终值即为所求结果;3)从二进制数的最高位到最低位开始对每一位都用公式1进行运算,得到的d为该步的结果,公式1:c=2*c;d=fmod(d*d,n);4)若二进制数是1,则在上面的运算后继续以下运算:c=c+1;d=fmod(d*a,n);得到的结果d才为该步的最终结果。4)验证数字签名的设计与实现得到数字签名用公钥e解密数字签名得到消息摘要(解密信息)开始结束验证数字签名流程验证数字签名的正确与成功性,主要是比较得到的两次消息摘要是否一样,如果验证方用签名方的公钥解密得到消息摘要(即是本设计中得到的解密信息)和他自己计算得到的消息摘要(在本系统中为第一次计算得到的消息摘要)是一样的,则证明签名是正确的,没有被篡改或是冒充,验证签名的原理则是根据RSA的解密算法,具体的理论流程图如图所示:(在本设计中签名和验证签名都在同一界面实现,不进行文件的双方传输)验证数字签名的过程时应用的解密算法是RSA的解密原理,而RSA的解密过程也应用了求一个整数的整数次幂,再取模的运算。在此也采用了快速指数算法,具体的算法过程同RSA的加密过程中应用的快速指数算法是一样的。RSA算法及数字签名认证整体代码实现:package com.rsa;import java.security.KeyFactory;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.PrivateKey;import java.security.PublicKey;import java.security.Signature;import erfaces.RSAPrivateKey;import erfaces.RSAPublicKey;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;import java.util.HashMap;import java.util.Map;import mons.codec.binary.Hex;public class RSAsign public static final String KEY_ALGORITHM = RSA; /密钥算法 private static final String PUBLIC_KEY = PublicKey; /公钥 private static final String PRIVATE_KEY = PrivateKey; /私钥 public static final String SIGNATURE_ALGORITHM = SHA512withRSA; /签名算法 /*主函数*/ public static void main(String args) throws Exception String source = Information-201321093022-liuliu; System.out.println(待签名信息: + source ); /=生成密钥对= Map keys = RSAsign.generateKey(); RSAPublicKey PUBkey = (RSAPublicKey) keys.get(RSAsign.PUBLIC_KEY); System.out.println(公钥: + PUBkey); RSAPrivateKey PRIkey = (RSAPrivateKey) keys.get(RSAsign.PRIVATE_KEY); System.out.println(私钥: + PRIkey); /=私钥签名= byte SIGN = RSAsign.sign(PRIkey.getEncoded(), source.getBytes(); System.out.println(私钥签名结果: + Hex.encodeHexString(SIGN); /=公钥验证签名= boolean result = RSAsign.verify(PUBkey.getEncoded(), source.getBytes(), SIGN); System.out.println(公钥验证签名结果: + result); /*生成密钥对*/ public static Map generateKey() throws Exception /实例化密钥对生成器 KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM); /密钥对长度初始化 keyPairGen.initialize(1024); /实例化密钥对 KeyPair keyPair = keyPairGen.generateKeyPair(); /生成公钥 RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); /生成私钥 RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); /实例化Map对象,存储公钥和私钥 Map miyao = new HashMap(2); miyao.put(PUBLIC_KEY, publicKey); miyao.put(PRIVATE_KEY, privateKey); return miyao; /*签名*/ public static byte sign(byte PRIkey, byte shuju) throws Exception / 构造PKCS8EncodedKeySpec对象 PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(PRIkey); / KEY_ALGORITHM 指定的加密算法 KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); / 取私钥匙对象 PrivateKey privateKey = keyFactory.generatePrivate(pkcs8KeySpec); / 用私钥对信息生成数字签名 /实例化一个用SHA512算法进行散列,用RSA算法进行加密的Signature对象 Signature qianming = Signature.getInstance(SIGNATURE_ALGORITHM); /设置加密散列码所用的私钥 qianming.initSign(privateKey); /设置散列算法的输入信息 qianming.update(shuju); /进行散列,并对产生的散列码进行加密并返回 return qianming.sign(); /*验证签名*/ public static boolean verify(byte PUBkey, byte shuju, byte SIGN) throws Exception / 构造X509EncodedKeySpec对象 X509EncodedKeySpec keySpec = new X509EncodedKeySpec(PUBkey); / KEY_ALGORITHM 指定的加密算法 KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); / 取公钥匙对象 PublicKey publicKey = keyFactory.generatePublic(keySpec); /用公钥对签名 进行验证 /实例化一个用SHA512算法进行散列,用RSA算法进行加密的Signature对象 Signature qianming = Signature.getInstance(SIGNATURE_ALGORITHM); /设置解密散列所用的公钥 qianming.initVerify(publicKey); /设置散列算法的输入信息 qianming.update(shuju); /验证签名与得到的签名是否一致 return qianming.verify(SIGN); 组内分工(可选)实验结果分析及心得体会实验输出截图:可以清楚地看见签名的信息、公钥产生的值(未完全截图)、私钥的值,以及私钥的签名结果和签名的认证结果。它们的计算方法和产生过程已经在前面讲清楚了,根据写入的消息(明文信息)计算出来的消息摘要、解密数字签名得到的消息摘要(即是本设计中的解密信息)。如果两个消息摘要是一样的则证明RSA数字签名者的身份的真实性,从而实现了RSA数字签名。成绩评定教师签名: 年 月 日备注:源代码附后,源代码要求有注释说明年级2013班号产业班学号201321093022专业网络工程姓名刘浏实验名称基于B/S三层体系结构的用户身份验证系统的设计与开发实验类型设计型综合型创新型实验目的或要求基于B/S三层体系结构,实现用户身份验证。能够熟练应用加密解密算法,基本掌握身份验证的整个流程。实验原理(算法流程) 图1 程序数据流示意图本实验使用JSP+APPLET+JAVABEAN技术:A. 程序逻辑结构:客户端通过浏览器下载APPLET和加密解密算法jar包,把密码加密成密文后发往服务器。服务器接收到后调用JAVABEAN组件的方式解密密文,得到密码,连接数据库,查询数据库,对登陆信息中用户名和密码验证。B. JavaBean组件JavaBean就是一个Java类,也就意味着,JAVA的一切特性,此JavaBean没有图形显示代码,只是完成基本业务逻辑,JavaBean可以使用JAVA的封装、继承、多态,使用JavaBean封装许多重复调用的代码,使用JavaBean可以达到显示与业务的分离,显示使用JSP,业务使用JavaBeanJavaBean的优点(写不完时,可另加附页。)提高代码的可复用性 对于通用的事务处理逻辑,数据库操作等都可以封装在JavaBean中,通过调用JavaBean的属性和方法可以快速的进行程序设计。程序易于开发维护 实现逻辑的封装,使事务处理和显示互不干扰。支持分布式运用 多用JavaBean,尽量减少java代码和Jsp的混编。C. Applet组件Applet或Java小应用程序是一种在Web环境下,运行于客户端的Java程序组件。它也是上世纪90年代中期,Java在诞生后得以一炮走红的功臣之一。通常,每个Applet的功能都比较单一(例如仅用于显示一个舞动的Logo),因此它被称作“小应用程序”。Applet必须运行于某个特定的“容器”,这个容器可以是浏览器本身,也可以是通过各种插件,或者包括支持Applet的移动设备在内的其他各种程序来运行。与一般的Java应用程序不同,Applet不是通过main方法来运行的。在运行时Applet通常会与用户进行互动,显示动态的画面,并且还会遵循严格的安全检查,阻止潜在的不安全因素(例如根据安全策略,限制Applet对客户端文件系统的访问)。图2 Applet程序运行图代码实现与截图展示:用户登录组建如下所示:代码如下所示:import java.awt.*;import java.applet.Applet;import java.awt.event.*;import java.lang.String;import com.mima.jiami;public class abc extends Applet public Label nameLabel,passwardLabel,titleLabel; public TextField name,passward; public void init() setLayout(null); titleLabel = new Label(用户登陆); titleLabel.setFont(new Font(Times New Roman,Font.BOLD,30); titleLabel.setBackground(Color.orange); nameLabel = new Label(用户名:); nameLabel.setFont(new Font(Times New Roman,Font.BOLD,30); nameLabel.setBackground(Color.green); nameLabel.setForeground(Color.red); passwardLabel = new Label(密码:); passwardLabel.setFont(new Font(Times New Roman,Font.BOLD,30); passwardLabel.setBackground(Color.green); passwardLabel.setForeground(Color.red); name = new TextField(); name.setFont(new Font(Times New Roman,Font.BOLD,30); passward = new TextField(); passward.setFont(new Font(Times New Roman,Font.BOLD,30); passward.setEchoChar(*); titleLabel.setLocation(200,0);titleLabel.setSize(140,70); nameLabel.setLocation(100,100);nameLabel.setSize(120,50); name.setLocation(250,100);name.setSize(200,40); passwardLabel.setLocation(100,200);passwardLabel.setSize(120,50); passward.setLocation(250,200);passward.setSize(200,40); add(nameLabel);add(name); add(titleLabel); add(passwardLabel);add(passward); public String getPassword() tryString aPass= passward.getText();jiami ajiami = new jiami();String mi=ajiami.jiaMi(aPass);return mi; catch (Exce
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新质生产力的关键是开放
- 2025年感染科医院感染控制流行病学考试答案及解析
- 2025年内分泌科代谢性疾病诊断与治疗考察答案及解析
- 2025年康复科功能康复训练设计案例答案及解析
- 民族地区课件
- 2025年肿瘤科细胞病理学判断实战训练答案及解析
- 2025年急救科常见危急病情处理模拟测试题答案及解析
- 民族团结的课件教学
- 2025年儿科日常疾病护理技能评估答案及解析
- 医患关系主题小品
- 工程造价廉洁自律教育课
- 陕西专升本英语词汇表
- 2025年乡村医生公共卫生服务考试题库基础知识试题
- 美国护理学校招生要求
- 社工禁毒面试题及答案
- 养鱼塘管理制度
- 装修多人合伙协议书
- 汽车行业售后
- 吊篮使用施工方案
- 2025华电(海西)新能源限公司面向华电系统内外公开招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2025南京铁道职业技术学院辅导员考试题库
评论
0/150
提交评论