当前位置: 首页 > news >正文

信息安全实验一:DES分组密码算法 2019.03.21

实验一:DES分组密码算法

一、实验目的

理解、掌握DES分组密码算法流程。

二、实验内容

  1. 阅读、分析DES分组密码源程序。
  2. 调用DES分组密码源程序中的相关函数,完成8字节的明文加密成8字节的密文,并完成解密。
  3. 调用DES分组密码源程序中的相关函数,设计一个文件加密器,可以加密任意长度的文件,并密文文件可解密还原回原明文文件。

二、DES分组密码算法流程

 

 

四、实验过程

  1. 阅读、分析DES分组密码源程序。

 

 

工具函数:

ByteTobit将字节转换成二进制

BitToByte二进制转换成字节

Char8ToBit64 将长度为8的字符串转为二进制位串

Bit64ToChar8 将二进制位串转为长度为8的字符串

DES相关函数:

DES_MakeSubKeys 生成子密钥

DES_PC1_Transform 密钥置换1

DES_PC2_Transform 密钥置换2

DES_ROL循环左移

DES_IP_Transform IP置换

DES_IP_1_Transform IP逆置换

DES_E_Transform 扩展置换(E置换)

DES_P_Transform P置换

DES_XOR 异或

DES_SBOX S盒置换

DES_Swap 交换

DES_EncryptBlock 加密单个分组(8字节)

DES_DecryptBlock 解密单个分组(8字节)

DES_Encrypt 加密任意长度文件

DES_Decrypt 解密任意长度文件

  • 实验结果
  1. 调用DES分组密码源程序中的相关函数,完成8字节的明文加密成8字节的密文,并完成解密。

int main()

{

/*明文   加密后的密文   密钥   解密后的结果*/

ElemType  plainBlock[8],cipherBlock[8], keyBlock[8],resultBlock[8];

/*二进制流 子密钥*/

ElemType bKey[64],subKeys[16][48];

 

char *keyStr = "12345678";

/*  设置密钥因为keyStr是9位的,结尾多了\0   */

memcpy(keyBlock, keyStr, 8);

/*将密钥转换为二进制流*/

Char8ToBit64(keyBlock, bKey);

/*生成子密钥*/

DES_MakeSubKeys(bKey, subKeys);

 

//1、加密

char * text = "12345678";

memcpy(plainBlock, text, 8);

DES_EncryptBlock(plainBlock, subKeys, cipherBlock);

printf("加密完成\n");

for (int i = 0; i < 8; i++)

printf("%c", cipherBlock[i]);

printf("\n");

//2、解密

DES_DecryptBlock(cipherBlock, subKeys, resultBlock);

printf("解密完成\n");

for(int i=0;i<8;i++)

printf("%c", resultBlock[i]);

printf("\n");

getchar();

return 0;

 

}

五、实验结果:

输入的明文是"12345678"

 

注意:由于直接打印string的话,得遇到\0才会停止,会有多余的输出,所以这里使用了for循环只打印8个字符,密文长度和明文相同

 

 

  1. 调用DES分组密码源程序中的相关函数,设计一个文件加密器,可以加密任意长度的文件,并密文文件可解密还原回原明文文件。

int DES_Encrypt(char *plainFile, char *keyStr, char *cipherFile);

int DES_Decrypt(char *cipherFile, char *keyStr, char *plainFile);

int main()

{

//把1.txt文件的内容加密后放到2.txt里

//再把2.txt文件的内容解密,放到3.txt里

DES_Encrypt("1.txt", "12345678", "2.txt");

printf("加密完成\n");

DES_Decrypt("2.txt", "12345678", "3.txt");

printf("解密完成\n");

return 0;

}

 

 

1.txt文件 明文

1234567890123456789012345678901234567890

2.txt文件 密文

?躊克?谀9蟮?晕2_x0016__x0019_两~)懕?芻JubK/F氽D鍬逘&稟

3.txt文件 解密后的密文

1234567890123456789012345678901234567890

* 特别注意在这里我的UTF8编码的文本文档的开头三个字符为EF BB BF所以总字符为43个而不是40个

 

 

相关文章:

  • 信息安全实验二:分组密码工作模式 2019.04.15
  • 信息安全实验三:求模逆算法 2019.04.18
  • 信息安全实验四:RSA公钥加密算法 2019.04.28
  • 信息安全实验五:散列算法 2019.05.18
  • 信息安全实验六:RSA数字签名算法 2019.06.01
  • 基于寒武纪平台的边缘智能实践课程-实验报告 2019.7.5
  • 基于深度学习的实时人脸识别 2019.3.6
  • YOLO论文阅读 ⽬标检测: You Only Look Once: Unified, Real-Time Object Detection 2018.12.20
  • TensorFlow与Flask结合打造手写体数字识别 https://www.imooc.com/learn/994
  • 云计算第2次作业
  • C#读取xml
  • JS对话框
  • Div弹出框
  • .pyc文件是什么?
  • MySQL查询交集
  • (三)从jvm层面了解线程的启动和停止
  • 【comparator, comparable】小总结
  • 2019年如何成为全栈工程师?
  • Android Volley源码解析
  • ComponentOne 2017 V2版本正式发布
  • ERLANG 网工修炼笔记 ---- UDP
  • ES6核心特性
  • GitUp, 你不可错过的秀外慧中的git工具
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • JS变量作用域
  • laravel 用artisan创建自己的模板
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Linux后台研发超实用命令总结
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • nodejs实现webservice问题总结
  • Sass 快速入门教程
  • vue:响应原理
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 给github项目添加CI badge
  • 如何学习JavaEE,项目又该如何做?
  • Java数据解析之JSON
  • Python 之网络式编程
  • 组复制官方翻译九、Group Replication Technical Details
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #pragma once与条件编译
  • (2020)Java后端开发----(面试题和笔试题)
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (推荐)叮当——中文语音对话机器人
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Framework杂记
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET/C# 的字符串暂存池
  • .net2005怎么读string形的xml,不是xml文件。
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)