【北京航空航天大学】【信息网络安全实验】【实验一、密码学:DES+RSA+MD5编程实验】

信息网络安全实验

实验一、DES RSA MD5

一、实验目的

1. 通过对DES算法的代码编写,了解分组密码算法的设计思想和分组密码算法工作模式;
2. 掌握RSA算法的基本原理以及素数判定中的Rabin-Miller测试原理、Montgomery快速模乘(模幂)算法,了解公钥加密体制的优缺点及其常见应用方式;
3. 掌握MD5算法的基本原理,了解其主要应用方法。

二、实验内容

1. DES编程实验
2. RSA编程实验
3. MD5编程实验

三、实验环境

主机:
操作系统:windows11 专业工作站版,64位
cpu: AMD Ryzen 5 4500U
Ram: 16GB

虚拟机:
网络连接:

四、实验过程

(一)、DES编程实验

(1). DES_EDE2算法程序实现框图:

在这里插入图片描述

程序使用说明(Python代码见附录部分):
1. 打开main.py;
2. 给3个参数m(明文)、prok1(DES密钥1)、prok2(DES密钥2)分别赋值;
3. 点击运行即可。

本部分源程序清单:
1. Deslib.py;
2. main.py
3. des.py
4. testCode.py

加解密测试:

1、 DES加密,密钥为112b全0,明文为ff ff ff ff ff ff ff ff,加密结果:
0x35 55 50 b2 15 0e 24 51
2、 DES解密,密钥为112b全0,密文为35 55 50 b2 15 0e 24 51,解密结果:
0xff ff ff ff ff ff ff ff

相关代码:

在这里插入图片描述
实机运行截图:

在这里插入图片描述
(2). 算法加密速度测试结果:

硬件配置:

cpu:

在这里插入图片描述

ram:

在这里插入图片描述

测试结果:

在这里插入图片描述

实验说明: 使用spdtst1.txt, spdtst2.txt, hand.jpg, castle.png, paper.pdf等5个文件测试DES算法的速度。文件大小以及对应的加密用时分别为:

在这里插入图片描述

运行时截图:

在这里插入图片描述

(3)、使用CBC方式加密一段64B 自选数据,改变初始向量值,比较加密结果。
64B自选数据:
1sgeiurhn49t340853fiehjgosieurhOIUHRETNBG23456789D!@#$%&*%#@y@
初始向量1:12345678——加密结果1:
qGC4As87+swa1A97AEcR/+UqHKUWN2RsX2rf0m7BfgE3XLOvzkqlzbfBy6rsOu5CHYr8CX65rH5OQ9FNv3dg9zueu7u5kvw8
初始向量2:abcdefgh——加密结果2:
xUhViFWAge1RJZpSKVw5579MFFsv9aDxr8Zt/jS0PvvdfKCXCLWDCQ0cbJKbNR5juP7H5FIRXKqg+bT709pr/vyZQoLxo8Ci

(二)、RSA编程实验
1、RSA算法实现
2、混合加密实验

3、自行编程实现RSA加解密算法
实现框图:
1、密钥生成算法:
在这里插入图片描述

2、加密算法:

在这里插入图片描述

3、解密算法:

在这里插入图片描述
源程序清单:rsa.py

加、解密实例:

明文:m = 125
加密后:167129
解密结果:125

在这里插入图片描述

4、RSA签名算法

运行结果:

在这里插入图片描述

(三)、MD5编程实验

1、实现自己的MD5算法代码。代码见附录部分。

测试:
message(消息): This is a md5 test.
hash(哈希值): 327d5ac107081f08a3424170232e82d6

在这里插入图片描述

2、构造一个长度为1KB左右的文本文件,以MD5算法对文件计算Hash值。
文本文件: md5.txt
在这里插入图片描述

内容:The Tower Mansion, 29 Melbury Road, is a late-Victorian townhouse in the Holland Park district of Kensington and Chelsea, London, built by the architect and designer William Burges as his home. Designed between 1875 and 1881, in the French Gothic Revival style, it was described by the architectural historian J. Mordaunt Crook as “the most complete example of a medieval secular interior produced by the Gothic Revival, and the last”.[2] The house is built of red brick, with Bath stone dressings and green roof slates from Cumbria, and has a distinctive cylindrical tower and conical roof. The ground floor contains a drawing room, a dining room and a library, while the first floor has two bedrooms and an armoury. Its exterior and the interior echo elements of Burges’s earlier work, particularly the McConnochie House in Cardiff and Castell Coch. It was designated a Grade I listed building in 1949.

Burges bought the lease on the plot of land in 1875. The house was built by the Ashby Brothers, with interior decoration by members of Burges’s long-standing team of craftsmen such as Thomas Nicholls and Henry Stacy Marks.

Hash值:f0723c283cb89be033889ee35ed34e78
转换成2进制:
11110000011100100011110000101000001111001011100010011011111000000011001110001000100111101110001101011110110100110100111001111000

在这里插入图片描述

(3)、修改构造的文本文件(修改字母或增删内容),再次计算Hash值,与步骤(2)中Hash值进行比较,看看多少bit发生改变。
修改:将The Tower House改成The Tower Mansion
新的Hash值:f44f1d2fc44b3037bf3b771259aeb213
转换成2进制:
11110100010011110001110100101111110001000100101100110000001101111011111100111011011101110001001001011001101011101011001000010011
不同的位数:71.

(4)、测试MD5算法的速度。
硬件配置:
cpu:
在这里插入图片描述

ram:

在这里插入图片描述

实验说明:使用spdtst1.txt, spdtst2.txt, icons.txt, tensorflow.whl, userdata.img等5个文件测试MD5算法的速度。文件大小以及对应散列用时分别为:

在这里插入图片描述

运行时截图:

在这里插入图片描述

五、实验结论

(一)、DES编程实验

在DES加密算法中,若使用CBC工作模式,且初始向量不同,则加密结果也不同。

(二)、RSA编程实验

加密数据(明文)的数值大小对RSA加密速度的影响:

在这里插入图片描述

程序运行截图:

在这里插入图片描述

对称密码、非对称密码体制的对比:

在这里插入图片描述

(三)、MD5编程实验
算法流程:
MD5是输入不定长度信息,输出固定长度128位的算法。经过程序流程,生成4个32位数据,最后联合起来成为一个128位的散列值。基本方式为:求余、取余、调整长度、与链接变量进行循环运算,得出结果。
运算方式:
在这里插入图片描述

图示:

在这里插入图片描述

算法流程描述:

(1)、填充:首先将输入信息的长度进行填充,使得位数%512 == 448;
(2)、记录信息长度:用64位来存储填充前信息长度;
(3)、装入4个标准幻数;
(4)、四轮循环运算。

六、实验涉及到的算法

(1)、DES加解密算法、MD5散列算法;
(2)、rsa加解密算法、rsa数字签名算法、Miller-Rabin素数检测法、Montgomery算法.

附录:实验Python源代码

(一)、DES编程实验

Deslib.py:

def eBox(m):
    return m[31] + m[0] + m[1] + m[2] + m[3] + m[4] + \
           m[3] + m[4] + m[5] + m[6] + m[7] + m[8] + \
           m[7] + m[8] + m[9] + m[10] + m[11] + m[12] + \
           m[11] + m[12] + m[13] + m[14] + m[15] + m[16] + \
           m[15] + m[16] + m[17] + m[18] + m[19] + m[20] + \
           m[19] + m[20] + m[21] + m[22] + m[23] + m[24] + \
           m[23] + m[24] + m[25] + m[26] + m[27] + m[28] + \
           m[27] + m[28] + m[29] + m[30] + m[31] + m[0]


def ipBox(m, reverse=False):
    if reverse:
        return m[39] + m[7] + m[47] + m[15] + m[55] + m[23] + m[63] + m[31] + \
               m[38] + m[6] + m[46] + m[14] + m[54] + m[22] + m[62] + m[30] + \
               m[37] + m[5] + m[45] + m[13] + m[53] + m[21] + m[61] + m[29] + \
               m[36] + m[4] + m[44] + m[12] + m[52] + m[20] + m[60] + m[28] + \
               m[35] + m[3] + m[43] + m[11] + m[51] + m[19] + m[59] + m[27] + \
               m[34] + m[2] + m[42] + m[10] + m[50] + m[18] + m[58] + m[26] + \
               m[33] + m[1] + m[41] + m[9] + m[49] + m[17] + m[57] + m[25] + \
               m[32] + m[0] + m[40] + m[8] + m[48] + m[16] + m[56] + m[24]
    else:
        return m[57] + m[49] + m[41] + m[33] + m[25] + m[17] + m[9] + m[1] + \
               m[59] + m[51] + m[43] + m[35] + m[27] + m[19] + m[11] + m[3] + \
               m[61] + m[53] + m[45] + m[37] + m[29] + m[21] + m[13] + m[5] + \
               m[63] + m[55] + m[47] + m[39] + m[31] + m[23] + m[15] + m[7] + \
               m[56] + m[48] + m[40] + m[32] + m[24] + m[16] + m[8] + m[0] + \
               m[58] + m[50] + m[42] + m[34] + m[26] + m[18] + m[10] + m[2] + \
               m[60] + m[52] + m[44] + m[36] + m[28] + m[20] + m[12] + m[4] + \
               m[62] + m[54] + m[46] + m[38] + m[30] + m[22] + m[14] + m[6]


def pBox(m):
    return m[15] + m[6] + m[19] + m[20] + m[28] + m[11] + m[27] + m[16] + \
           m[0] + m[14] + m[22] + m[25] + m[4] + m[17] + m[30] + m[9] + \
           m[1] + m[7] + m[23] + m[13] + m[31] + m[26] + m[2] + m[8] + \
           m[18] 
  • 31
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不是AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值