DES实验报告
一、实验题目
DES加密算法
二、实验目的和要求
通过实验,掌握DES密码的程序实现,熟悉比特串的操作,矩阵变换,提高C++程序设计能力。
编写 DES 密码的加密解密程序,运行并验证。 (1) 输入 64 比特明文和密文,利用 DES 密码对其加密并输出密文。 (2) 输入 DES 加密的 64 比特密文和密钥,对其进行解密。 (3) 记录调试和验证过程,完成实验报告。
三、实验环境
clion
四、实验内容
DES 算法包括: (1):一个初始置换 IP:重排明文分组的 64 比特数据 (2):相同功能的 16 轮变换:每轮中都有置换和代换运算,第 16 轮变换的输出 分为左右两半,并被交换次序 (3):经过一个逆初始置换 IP-1(为 IP 的逆)。最后产生 64 比特的密文。
- 给定的 DES 结构如图:
- 每轮的结构如图:
32 比特扩展 48 位, 轮密钥异或, S 盒代换(1,6 位合并选行,2-5 位合并选列), 置换 P
- 轮密钥生成:
输入算法的 56 比特有效密钥: 1.首先经过一个置换运算(实际初始密钥共 64 位,去除 8 个校验位并且改变 顺序), 2.然后将置换后的 56 比特分为各为 28 比特的𝐶𝐶0和𝐷𝐷0两半。第𝑖𝑖轮𝐶𝐶𝑖𝑖−1和𝐷𝐷𝑖𝑖−1,分别左循环移位。得到𝐶𝐶𝑖𝑖和和𝐷𝐷𝑖𝑖−1 做为求下一轮子密钥的输入,同时也输入置换选择 2。 3.置换选择 2 产生的 48 比特的 ,即为本轮的子密钥,输入函数。
验证操作 :
- 选择进行文件加密,输入长度为 8 个字符的加解密的密钥,读入明文文件 1.txt,加密文件存储在 2.txt 文件中;
- 选择进行文件解密,输入长度为 8 个字符的加解密的密钥,读入密文文件 2.txt,解密文件存储在 3.txt 文件中。
五、算法描述及实验步骤
准备部分的矩阵:初始置换IP,逆初始置换IP,E表,置换函数P。
F中的代换由8个S盒组成。64比特密钥进行第一轮置换选择,变为56比特的有效密钥。分成两组后,左移位,再进入置换选择2.
将字符转为二进制的形式,与密钥参与异或运算
DES明文处理的过程有三个阶段:
1.初始置换IP:重排明文分组的64比特数据
2.16轮变换:每轮中包含置换、代换。变换的输出被分为左右两组,被交换次序
3.逆初始置换IP,产生密文
DES密钥生成:
1.56比特密钥经过置换
2.将置换后的56比特,分为两组,Ci、Di。
3.第i轮Ci-1、Di-1分别左移位。得到的Ci、Di作为下一轮求子密钥的输入,同时输入置换选择2
4.置换选择2生成48比特子密钥Ki,输入到F函数
轮结构:
$$L_i=R_{i-1}$$
$$R_i=L_{i-1}\oplus F(R_{i-1},K_i)$$
F的处理过程:
$$(R_{i-1}扩展/置换(E表)\oplus K_i)\ 进入S盒,变为32比特。置换(P),$$
六、调试过程及结果(附截图)
七、总结体会
❓任选两个模块描述执行过程
‼️明文的处理:
将字符转换为二进制,后面方便与密钥进行异或运算
1 | int ISD_DES_ByteToBit(ElemType ch, ElemType bit[8]){ |
一字节长度为8比特:将其转换为二进制串
1 | int ISD_DES_Char8ToBit64(ElemType ch[8],ElemType bit[64]){ |
‼️明文的加密:
1.初始置换IP:重排明文分组的64比特数据
2.16轮变换:每轮中包含置换、代换。变换的输出被分为左右两组,被交换次序
3.逆初始置换IP,产生密文
1 | int ISD_DES_EncryptBlock(ElemType plainBlock[8], ElemType subKeys[16][48], ElemType cipherBlock[8]){ |