一、实验目的
通过实现DES/AES算法,加深对DES/AES算法的理解,同时学习组合密码常用的代换、移位等运算的实现。
- 实验内容
1)利用C\C++实现DES/AES算法的加、解密运算。
- 实验步骤
Des加密的流程图如下
按照上面的原理图实现加密主要的函数如下:
void IP_transform(int *data);//第一步进行初始置换IP,然后进行16轮迭代
//先分成L0,R0
void Get_key();
//由k生成子密钥Ki的算法
void PC_1_replace(int *key, int *key_56);//选择置换PC_1,去掉奇偶校验位并打乱,变成56位
void MoveLeft(int *c, int *d, int m);//划分成左右32位进行左移变化
void PC_2_replace(int *key_56, int *key_48);//选择置换PC_2,从CiDi中选取48位作为密钥Ki
//加密函数f
void E_extend(int *data_32, int* data_48);//位选择函数E(R),将32位的输入变成48位
//将E(R(i-1))与子密钥Ki进行异或E(R i-1)^Ki=B1 B2 B3 B4 B5 B6 B7 B8,
void S_replace(int *data_48, int *data_s32);//Bj原为6位经过S盒后缩减为4位,S1到S8,变成共为32位
void P_replace(int *data_32);//经过p盒处理得到f(R i-1,Ki)
void IP1_transform(int *data);//逆初始置换得到密文
1.由k生成子密钥Ki的算法
先进行选择置换PC_1,然后划分成左右32位进行左移变化,最后进行选择置换PC_2,从CiDi中选取48位作为密钥Ki,共执行16次轮迭代
- 首先进行初始置换IP,然后进行16轮迭代,第一步分成L0,R0,每一轮迭代为Li=Ri-1 Ri=L i-1^f(R i-1,Ki)
- 关于f函数
先进行位选择函数E(R),将32位的输入变成48位,然后经过S盒将Bj缩减为4位Sj,变成共为32位,最后经过p盒处理得到f(R i-1,Ki)
代码如下:
// des.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
#include "pch.h"
#include <iostream>
using namespace std;
void IP_transform(int *data);//第一步进行初始置换IP,然后进行16轮迭代
//先分成L0,R0
void Get_key();
//由k生成子密钥Ki的算法
void PC_1_replace(int *key, int *key_56);//选择置换PC_1,去掉奇偶校验位并打乱,变成56位
void MoveLeft