【北京航空航天大学】【信息网络安全实验】【实验一、密码学: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,一经查实,立即删除!

相关文章

gem5学习(21):索引策略——Indexing Policies

目录 一、集合关联(Set Associative) 二、倾斜关联(Skewed Associative) 索引策略确定基于地址将一个块映射到哪个位置。 索引策略的最重要方法是getPossibleEntries()和regenerateAddr(): getPossibleEntries()用…

数组转二叉树的一种方法-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激…

1.函数模板基础

1.1函数模板作用&#xff1a; 建立一个通用函数&#xff0c;其函数返回值类型和形参类型可以不具体指定&#xff0c;用一个虚拟的类型来代表&#xff0c;提高复用性 1.2语法&#xff1a; //第一种 template <typename T> 函数声明或定义//第二种 template <class T&…

AI趋势(06) Sora,AI对世界的新理解

说明&#xff1a;使用 黄金圈法则学习和解读Sora&#xff08;what、why、how&#xff09; 1 Sora是什么&#xff1f; 1.1 Sora的基本解读 Sora是OpenAl在2024年2月16日发布的首个文本生成视频模型。该模型能够根据用户输入的文本自动生成长达60秒的1080p复杂场景视频&#xf…

Android稳定性相关知识

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

Python:异常处理

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

Linux中MySQL表名与@TableName中大小写关系

在使用SpringBoot时&#xff0c;我们普遍会使用注解&#xff0c;实体类中使用注解TableName指明表&#xff0c;以下是TableName的一些注意事项。 【说明】 在MySQL中&#xff0c;表名的大小写处理与操作系统和数据库服务器的配置有关。MySQL默认是在Linux系统上区分大小写的&…

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

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

Jupyter的全面探索:从入门到高级应用

1. 引言 Jupyter项目的简介 Jupyter项目是一个开源项目&#xff0c;旨在为科学计算、数据分析和教育提供交互式计算和数据科学环境。它允许用户创建和共享包含实时代码、方程、可视化以及叙述性文本的文档&#xff0c;这些文档被称为“笔记本”。Jupyter支持超过40种编程语言…

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

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

Java的跨平台特性

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

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

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

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

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

VueTreeselect 只能选择末级节点

场景&#xff1a;有些需求会要求只能选择末级节点。 解决办法&#xff1a;设置disable-branch-nodes为true。 <treeselectv-model"form.deptIds":options"deptOptions":show-count"true":limit"5"placeholder"请选择部门&quo…

FPGA之移位寄存器

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

智能家居控制系统:让生活更智能、更便捷

智能家居控制系统是一种集成了智能化技术的家居系统&#xff0c;通过连接各种智能设备和传感器&#xff0c;实现远程控制、自动化管理和智能化服务&#xff0c;让生活更智能、更便捷。以下是关于智能家居控制系统的几个方面的分点论述&#xff1a; 1. 远程控制功能&#xff1a;…

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

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