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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(中南民族大学信息安全实验报告终.docx)为本站会员(聆听****声音)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

中南民族大学信息安全实验报告终.docx

1、 院系: 计算机科学学院专业:信息与计算科学年级: 11 级课程名称: 信息安全班级 : 信息 3 班姓名 : 胡志桥 学号 : 11151196指导教师: 孟博2013 年月日年级11 级班号信息 3 班学号11151196专业信息与计算科学姓名胡志桥实验名称Engima 密码算法实验类型设计型综合型创新型实验目的或要求通过使用 Engima 密码模拟器,加深对古典密码体制的了解, 为深入学习现代密码学奠定基础。实验原理(算法流程)ENIGMA 看起来是一个装满了复杂而精致的元件的盒子。不过要是我们把它打开来,就可以看到它可以被分解成相当简单的几部分。下面的图是它的最基本部分的示意图,我们可

2、以看见它的三个部分:键盘、转子和显示器。在上面 ENIGMA 的照片上,我们看见水平面板的下面部分就是键盘,一共有 26 个键, 键盘排列接近我们现在使用的计算机键盘。为了使消息尽量地短和更难以破译,空格 和标点符号都被省略。在示意图中我们只画了六个键。实物照片中,键盘上方就是显 示器,它由标示了同样字母的 26 个小灯组成,当键盘上的某个键被按下时,和此字母被加密后的密文相对应的小灯就在显示器上亮起来。同样地,在示意图上我们只画 了六个小灯。在显示器的上方是三个转子,它们的主要部分隐藏在面板之下,在示意 图中我们暂时只画了一个转子。键盘、转子和显示器由电线相连,转子本身也集成了 6 条线路(

3、在实物中是 26 条),把键盘的信号对应到显示器不同的小灯上去。在示意图中我们可以看到,如果按下 a 键,那么灯 B 就会亮,这意味着 a 被加密成了 B。同样地我们看到,b 被加密成了A,c 被加密成了 D,d 被加密成了 F,e 被加密成了 E,f 被加密成了 C。于是如果我们在键盘上依次键入 cafe(咖啡),显示器上就会依次显示 DBCE。这是最简单的加密方法之一,把每一个字母都按一一对应的方法替换为另一个字母,这样的加密方式叫做“简单替换密码”。简单替换密码在历史上很早就出现了。著名的“凯撒法”就是一种简单替换法,它把每 个字母和它在字母表中后若干个位置中的那个字母相对应。比如说我们

4、取后三个位置, 那么字母的一一对应就如下表所示:明码字母表:abcdefghijklmnopqrstuvwxyz密码字母表:DEFGHIJKLMNOPQRSTUVWXYZABC于是我们就可以从明文得到密文:(veni, vidi, vici,“我来,我见,我征服”是儒勒凯撒征服本都王法那西斯后向罗马元老院宣告的名 言)明文:veni, vidi, vici密文:YHAL, YLGL, YLFL很明显,这种简单的方法只有 26 种可能性,不足以实际应用。一般上是规定一个比较随意的一一对应,比如明码字母表:abcdefghijklmnopqrstuvwxyz密码字母表:JQKLZNDOWECPAH

5、RBSMYITUGVXF甚至可以自己定义一个密码字母图形而不采用拉丁字母。但是用这种方法所得到的密 文还是相当容易被破解的。至迟在公元九世纪,阿拉伯的密码破译专家就已经娴熟地 掌握了用统计字母出现频率的方法来击破简单替换密码。破解的原理很简单:在每种 拼音文字语言中,每个字母出现的频率并不相同,比如说在英语中,e 出现的次数就要大大高于其他字母。所以如果取得了足够多的密文,通过统计每个字母出现的频率, 我们就可以猜出密码中的一个字母对应于明码中哪个字母(当然还要通过揣摩上下文 等基本密码破译手段)。柯南道尔在他著名的福尔摩斯探案集中跳舞的人里详细 叙述了福尔摩斯使用频率统计法破译跳舞人形密码的

6、过程。所以如果转子的作用仅仅是把一个字母换成另一个字母,那就没有太大的意思了。但是大家可能已经猜出来了,所谓的“转子”,它会转动!这就是谢尔比乌斯关于ENIGMA 的最重要的设计当键盘上一个键被按下时,相应的密文在显示器上显示, 然后转子的方向就自动地转动一个字母的位置(在示意图中就是转动 1/6 圈,而在实 际中转动 1/26 圈)。下面的示意图表示了连续键入 3 个 b 的情况:当第一次键入 b 时,信号通过转子中的连线,灯 A 亮起来,放开键后,转子转动一格, 各字母所对应的密码就改变了;第二次键入 b 时,它所对应的字母就变成了 C;同样 地,第三次键入 b 时,灯 E 闪亮。这不是一

7、种简单替换密码。同一个字母 b 在明文的不同位置时,可以被不同的字母替换,而密文中不同位置的同一个字母,可以代表明文中的不同字母,频率分析法在这里就没有用武之地了。这种加密方式被称为“复式替换密码”。但是我们看到,如果连续键入 6 个字母(实物中 26 个字母),转子就会整整转一圈,回到原始的方向上,这时编码就和最初重复了。而在加密过程中,重复的现象是很危险的,这可以使试图破译密码的人看见规律性的东西。于是谢尔比乌斯在机器上又加了一个转子。当第一个转子转动整整一圈以后,它上面有一个齿拨动第二个转子,使得它的方向转动一个字母的位置。看下面的示意图(为了简单起见,现在我们将它表示为平面形式):这里

8、(a)图中我们假设第一个转子(左边的那个)已经整整转了一圈,按 b 键时显示器上 D 灯亮;当放开 b 键时第一个转子上的齿也带动第二个转子同时转动一格,于是(b) 图中第二次键入 b 时,加密的字母为 F;而再次放开键 b 时,就只有第一个转子转动了,于是(c)图中第三次键入 b 时,与 b 相对应的就是字母 B。(写不完时,可另加附页。)组内分工(可选)实验结果分析及心得体会加密成绩评定教师签名:年月日备注:源代码附后,源代码要求有注释说明年级11 级班号信息 3 班学号11151196专业信息与计算科学姓名胡志桥实验名称基于 RSA 的数字签名实现实验类型设计型综合型创新型实验目的或要求

9、掌握 RSA 算法的基本原理,通过用 RSA 算法对实际数据进行加密和解密来深刻了解 RSA 的运行原理。对数字签名有所了解,理解和掌握 MD5 算法, 以及如何利用 RSA 和 MD5 算法来实现数字签名。实验原理(算法流程)公钥密码体制中,解密和加密密钥不同,解密和加密可分离,通信双方无须事先交换密钥就可建立起保密通信,较好地解决了传统密码体制在网络通信中出现的问题.另外,随着电子商务的发展,网络上资金的电子交换日益频繁, 如何防止信息的伪造和欺骗也成为非常重要的问题.数字签名可以起到身份认证,核准数据完整性的作用.目前关于数字签名的研究主要集中基于公钥密码体制的数字签名.公钥密码体制的特

10、点是:为每个用户产生一对密钥(PK 和 SK);PK 公开,SK 保密;从 PK 推出 SK 是很困难的;A,B 双方通信时,A 通过任何途径取得 B 的公钥,用 B 的公钥加密信息.加密后的信息可通过任何不安全信道发送.B 收到密文信息后,用自己私钥解密恢复出明文.RSA 公钥密码体制到目前为止还是一种认可为安全的体制. RSA 算法和用RSA 算法实现数字签名的理论,以及它们在实际应用中的实现. 1、RSA 算法RSA 算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。RSA 的算法涉及三个参数, n、e1、e2。其中, n 是两个大

11、质数 p、q 的积, n 的二进制表示时所占用的位数就是所谓的密钥长度。e1 和 e2 是一对相关的值, e1 可以任意取,但要求 e1 与(p-1)*(q- 1)互质;再选择 e2,要求(e2*e1)mod(p-1)*(q-1)=1。(n 及 e1),(n 及 e2)就是密钥对。RSA 加解密的算法完全相同 ,设 A 为明文, B 为密文,则:A=Be1 mod n;B=Ae2 mod n; e1 和 e2 可以互换使用,即:A=Be2 mod n;B=Ae1 mod n;2、RSA 数字签名算法的理论描述RSA 数字签名算法的过程为:A 对明文 m 用解密变换作: s Dk (m)=md

12、modn,其中 d,n 为 A 的私人密钥,只有 A 才知道它;B 收到 A 的签名后,用 A 的公钥和加密变换得到明文,因: Ek(s)= Ek(Dk (m)= (md)e mod n,又 de1 mod (n)即 de=l(n)+1,根据欧拉定理 m(n)=1modn,所以 Ek(s)=ml(n)+1=m(n) em=m mod n.若明文 m 和签名 s 一起送给用户 B,B 可以确信信息确实是 A 发送的.同时 A 也不能否认送给这个信息,因为除了 A 本人外,其他任何人都无法由明文 m 产生 s.因此 RSA 数字签名方案是可行的.,但是 RSA 数字签名算法存在着因计算方法本身同构

13、造成签名易被伪造和计算时间长的弱点,因此实际对文件签名前,需要对消息做 MD5 变换. MD5 函数是一种单向散列函数,它将任意长度的消息压缩成 128 位的消息摘要.应用 MD5 的单向性(即给定散列值,计算消息很难)和抗碰撞性(即给定消息 M,要找到另一消息 M 并满足两者的散列值很难),可以实现信息的完整性检验.另外该函数的设计不基于任何假设和密码体制而直接构造,执行的速度快,是一种被广泛认可的单向散列算法.3、MD5 算法的实现算法描述:对 MD5 算法简要的叙述可以为: MD5 以 512 位分组来处理输入的信息,且每一分组又被划分为 16 个 32 位子分组,经过了一系列的处理后,

14、算法的输出由四个 32 位分组组成,将这四个 32 位分组级联后将生成一个 128 位散列值。在 MD5 算法中,首先需要对信息进行填充,使其字节长度对512 求余的结果等于 448。因此,信息的字节长度( Bits Length)将被扩展至 N*512+448,即 N*64+56 个字节( Bytes), N 为一个正整数。填充的方法如下,在信息的后面填充一个 1 和无数个 0,直到满足上面的条件时才停止用 0 对信息的填充。然后,在在这个结果后面附加一个以64 位二进制表示的填充前信息长度。经过这两步的处理,现在的信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是 5

15、12 的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。MD5 中有四个 32 位被称作链接变量( Chaining Variable)的整数参 数 , 他 们 分 别 为 : A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。当设置好这四个链接变量后,就开始进入算法的四轮循环运算。循环的次数是信息中 512 位信息分组的数目。将上面四个链接变量复制到另外四个变量中: A 到 a,B 到 b,C到 c,D 到 d。主循环有四轮( MD4 只有三轮),每轮循环都很相似。第一轮进行16 次操作。每次操作对 a、b、c 和 d 中的其中三

16、个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的一个子分组和一个常数。再将所得结果向右环移一个不定的数,并加上a、b、c 或 d 中之一。最后用该结果取代 a、b、c 或 d 中之一。MD5 的安全性MD5 相对 MD4 所作的改进:1. 增加了第四轮;2. 每一步均有唯一的加法常数;3. 为减弱第二轮中函数 G 的对称性从(X&Y)|(X&Z)|(Y&Z)变为(X&Z)|(Y&(Z);4. 第一步加上了上一步的结果,这将引起更快的雪崩效应;5. 改变了第二轮和第三轮中访问消息子分组的次序,使其更不相似;6. 近似优化了每一轮中的循环左移位移量以实现更快的雪崩效应。各轮的位移量互不

17、相同。组内分工( 可选)RSA 加密解密实验结果分MD5 加密析教师签名:年月日成绩评定备注:源代码附后,源代码要求有注释说明/RSA 加密解密package chp16;import java.security.*;import java.security.interfaces.*; import java.math.*;import java.io.*;public class Password_Test /用 FileInputStream 获取公钥/用 RSAPublicKey 类中的方法获取公钥的参数(e,n)/用“BigInteger m = new BigInteger(ptex

18、t);”来获得明文整数/执行计算public static void main(String args) try new Password_Test();Encryption_RSA(); catch (Exception e) e.printStackTrace();public Password_Test() throws Exception / 构造方法 创建公钥和私钥KeyPairGenerator kpg = KeyPairGenerator.getInstance(RSA);/生成实现 RSA 算法的 KeyPairGenerator 对象。kpg.initialize(1024)

19、;/ 初始化确定密钥的大小KeyPair kp = kpg.genKeyPair();/ 生成密钥对PublicKey pbkey = kp.getPublic();/ 创建公钥PrivateKey prkey = kp.getPrivate();/ 创建私钥/ 保存公钥FileOutputStream file1 = new FileOutputStream(Skey_RSA_pub.dat);ObjectOutputStream ob1 = new ObjectOutputStream(file1);/创建 ObjectOutputStream对象ob1.writeObject(pbkey

20、); /将指定的对象写入 ObjectOutputStream。/ 保存私钥FileOutputStream file2 = new FileOutputStream(Skey_RSA_priv.dat); ObjectOutputStream ob2 = new ObjectOutputStream(file2); ob2.writeObject(prkey);public static void Encryption_RSA() throws Exception System.out.println(根据公钥生成密文:+n); String string = I am a student;

21、/ 获取公钥及参数 e,nFileInputStream f_in = new FileInputStream(Skey_RSA_pub.dat); ObjectInputStream o_in = new ObjectInputStream(f_in); RSAPublicKey pbk = (RSAPublicKey) o_in.readObject(); BigInteger e = pbk.getPublicExponent();/返回此公钥的指数BigInteger n = pbk.getModulus();/返回此公钥的模System.out.println(公钥的指数 e= +

22、e);System.out.println(公钥的模 n= + n);/ 明文 bitbyte bt = string.getBytes(UTF8); BigInteger bit = new BigInteger(bt);/ 计算密文 c,打印BigInteger mi = bit.modPow(e, n);/生成密文System.out.println(生成密文为: + mi+nn);/打印密文/ 保存密文String save = mi.toString();BufferedWriter out = new BufferedWriter(new OutputStreamWriter( n

23、ew FileOutputStream(Enc_RSA.dat);out.write(save, 0, save.length(); out.close();Decrypt_RSA();public static void Decrypt_RSA() throws Exception System.out.println(根据私钥破解密文:+n);/ 读取密文BufferedReader in = new BufferedReader(new InputStreamReader( new FileInputStream(Enc_RSA.dat);String ctext = in.readLi

24、ne(); BigInteger mi = new BigInteger(ctext);/ 读取私钥FileInputStream f = new FileInputStream(Skey_RSA_priv.dat); ObjectInputStream b = new ObjectInputStream(f); RSAPrivateKey prk = (RSAPrivateKey) b.readObject(); BigInteger d = prk.getPrivateExponent();/返回此私钥的指数BigInteger n = prk.getModulus();/返回此私钥的模S

25、ystem.out.println(私钥的指数 d= + d);System.out.println( 私 钥 的 模 n= + n); BigInteger jie = mi.modPow(d, n);/进行解密操作System.out.println(m= + jie);/ 显示解密结果byte mt = jie.toByteArray(); System.out.println(解密后的文本内容为: ); for (int i = 0; i mt.length; i+) System.out.print(char) mti);MD5 加密package md5;import java.l

26、ang.reflect.*;/* MD5 算法的Java Bean MD5 类实现了RSA Data Security, Inc.在提交给IETF 的RFC1321中的MD5* message-digest 算法。*/public class MD5 / 下面这些S11-S44实际上是一个4*4的矩阵,在原始的C实现中是用#define 实现的, 这里把它们实现成为static/ final是表示了只读,切能在同一个进程空间内的多个Instance间共享static final int S11 = 7; static final int S12 = 12; static final int S

27、13 = 17; static final int S14 = 22;static final int S21 = 5; static final int S22 = 9; static final int S23 = 14; static final int S24 = 20;static final int S31 = 4; static final int S32 = 11; static final int S33 = 16; static final int S34 = 23;static final int S41 = 6; static final int S42 = 10; s

28、tatic final int S43 = 15; static final int S44 = 21;static final byte PADDING = -128, 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0, 0,0,0,0,0,0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0 ;/ 下面的三个成员是MD5计算过程中用到的3个核心数据,在原始的C实现中被定义到MD5_CTX结构中pr

29、ivate long state = new long4; / state (ABCD)private long count = new long2; / number of bits, modulo 264 (lsb/ first)private byte buffer = new byte64; / input buffer/ digestHexStr是MD5的唯一一个公共成员,是最新一次计算结果的16进制ASCII表示.public String digestHexStr;/ digest,是最新一次计算结果的2进制内部表示,表示128bit的MD5值.private byte digest = new byte16;/ getMD5ofStr是类MD5最

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2