【北京航空航天大学】【信息网络安全实验】【实验一、密码学: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] 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/688323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数组转二叉树的一种方法-java(很特殊)

上代码 Node节点的代码 public class ThreadNode {private int data;private ThreadNode left;private boolean leftTag; // 左子节点是否为线索private ThreadNode right;private boolean rightTag; // 右子节点是否为线索// ... 省略get和set方法// ... 省略构造方法// ... …

【MySQL】学习多表查询和笛卡尔积

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-N8PeTKG6uLu4bJuM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

Linux命令-netstat

用于端口和服务之间的故障排除 格式:netstat [常用参数] | grep 端口号/进程名称 -n:显示接口和端口的编号 -t:显示TCP套接字 -u:显示UDP套接字 -l:显示监听中的套接字 -p:显示端口对应的进程信息 -a&a…

一些常见的激活函数介绍

文章目录 激活函数1. sigmoid2. relu3. leakyReLu4. nn.PReLU5. nn.ReLU66. Softplus函数7. softmin, softmax, log softmax8. ELU 激活函数 1. sigmoid https://zhuanlan.zhihu.com/p/172254089 sogmoid函数的梯度范围在 0-0.25, 容易梯度消失 2. relu ReLU激…

Android稳定性相关知识

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、相关方法论3.1 crash3.2 性能3.3 高…

Python:异常处理

异常处理已经成为判断一门编程语言是否成熟的标准,除传统的像C语言没有提供异常机制之外,目前主流的编程语言如Python、Java、Kotlin等都提供了成熟的异常机制。异常机制可以使程序中的异常处理代码和正常业务代码分离,保证代码更加优雅&…

2024年重磅消息:来自OpenAI发布的视频生成模型Sora

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

自然语言编程系列(一):自然语言和程序语言介绍

1.自然语言和程序语言 自然语言和程序语言是两种截然不同但又相互关联的语言体系,它们分别服务于人类日常交流和计算机指令执行。 自然语言: 定义:自然语言是指人类在日常生活中使用的语言,如英语、汉语、法语等。它是非正式且灵…

Java的跨平台特性

Java语言特别流行的其中一个原因就是其具有良好的跨平台性,Java的跨平台性表现在通过 Java 语言编写的应用程序在不同的系统平台上都能够正常运行。其原理是:只要在需要运行 java 应用程序的操作系统上,先安装一个 Java 虚拟机(JVM Java Virt…

html表格标签(下):lable标签,select标签和textara标签

html表格标签(下):lable标签,select标签和textarea标签 lable标签 搭配 input 使用,点击 label 标签就能选中对应的单选/复选框, 能够提升用户体验。 for 属性: 指定当前 label 和哪个相同 id 的 input 标签对应 (此时点击才是有用的) 运行效果&#x…

信息安全认证 | CISP证书怎么样?值得考吗?

HCIE考证研究所的朋友们,新年快乐! 今天给大家说说CISP证书,新的一年祝大家逢考必过啊~ 01 考注册信息安全工程师证书的用处 CISP证书可作为学识和技能证明;求职、任职、晋升、加薪的资格凭证;用人单位招聘、录用劳动…

FPGA之移位寄存器

SLICEM中的LUT可以配置为32位移位寄存器,而无需使用slice中可用的触发器。以这种方式使用,每个LUT 可以将串 行数据延迟 1 到 32 个时钟周期。移入D (DI1 LUT 引脚)和移出 Q31(MC31 LUT 引脚)线路将LUT级联,以形成更大…

羊大师揭秘,如何挑选出好牧场的奶羊,该怎么看

羊大师揭秘,如何挑选出好牧场的奶羊,该怎么看 了解牧场的管理和环境:好的牧场应该有规范的管理制度,环境整洁,草场茂盛,为奶羊提供了充足的食物和良好的生活环境。在这样的牧场中,奶羊能够得到…

芯片的分类

目录 通用处理器数字信号处理器专用处理器 通用处理器 我们常听说的中央处理器CPU就是一种典型的通用处理器(GPP)。这种处理器多使用片上系统(SoC)的设计理念,在处理器上集成各种功能模块,每一种功能都是用…

⭐北邮复试刷题103. 二叉树的锯齿形层序遍历 (力扣每日一题)

103. 二叉树的锯齿形层序遍历 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 示例 1:输入&#xff1a…

视频如何去除水印?这三个方法赶紧收藏

在数字化内容的海洋中,视频已成为我们日常生活中不可或缺的一部分。然而,很多时候,我们渴望观看的优质视频内容却被水印所困扰。因此我们就需要视频去水印工具来帮助我们解决这些困扰。 一、水印云 水印云的视频去水印功能采用了先进的 AI …

【JavaEE】IP协议

作者主页:paper jie_博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文于《JavaEE》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&…

MySQL之select查询

华子目录 SQL简介SQL语句分类SQL语句的书写规范SQL注释单行注释多行注释 select语句简单的select语句select的算数运算select 要查询的信息 from 表名;查询表字段查询常量查询表达式查询函数 查询定义别名as安全等于<>去重distinct连接字段concat 模糊查询运算符比较运算…

(免费领源码)python#flask# MySQL人口分布系统74626-计算机毕业设计项目选题推荐

摘要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对人口分布系统等问题&#xff0c;对人口分布系…

浅析Linux追踪技术之ftrace:Event Tracing

文章目录 概述使用Event Tracing使用set_event接口使用enable接口 Event配置Event formatEvent Filtering过滤规则设置过滤器 Event TriggerTrigger语法 Trace marker相关参考 概述 Event Tracing&#xff08;事件追踪&#xff09;利用在内核代码中加入的各种Tracepoint&#…