密码学课设实验——des加密c++实现

一、实验目的

通过实现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次轮迭代

  1. 首先进行初始置换IP,然后进行16轮迭代,第一步分成L0,R0,每一轮迭代为Li=Ri-1 Ri=L i-1^f(R i-1,Ki)
  2. 关于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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值