📄 des.h
字号:
#include<iostream.h>
/*
*一个封装类,提供des算法加密和解密的实现
*
*/
class DES{
private:
char data[64]; // 需要加密的源码
char key[64] ; //双方约定的密钥
char leftData[32]; //左边的数组
char rightData[32]; //右边的数组
char temp48[48];
char temp32[32];
char temp64[64];
//算法中用到的一些转换的表格
int LEvenTable[32];
int ROddTable[32] ;
int ETable[48] ;
int SBox1[64] ;
int SBox2 [64] ;
int SBox3[64];
int SBox4[64] ;
int SBox5[64] ;
int SBox6[64];
int SBox7[64] ;
int SBox8[64] ;
int PTable[32];
int PC2Table[48] ;
int KeyTableC[28];
int KeyTableD[28];
int FinalTable[64];
char tempKey48[48];
//辅助函数,用来进行数据的交换
void Permutation(char[] , int[], int, char* );
//给所有的表赋值。
void InitialTables();
//将64位的plaintext,分解成两个32位,初始化左右数据leftData,rightData
void DESInitialPermutation();
//实现F的第一步,调用辅助函数,根据ETable和32位的输入rightData,得到48位的输出result,供下一步使用。
void ExpansionPermulation(char rightData[], char * result);
//将两个输入数组a,b进行异或操作,结果保存到xorResult中。
void XOR(char a[], char b[],int time, char* xorResult);
//将48位的输入转成32位的输出
void Substitution(char rightData[], char * result);
//查找SBox,取出保存在其中的值
int SearchSBox(int tableNo, int row, int colum);
void DecimalToChar(char *change, int indexFrom, int number);
//加密函数F的一部分,将32位的输入input做一次置换
void PermutationFuntion(char input[], char *result);
//将64位的初始key转换成两个28位的半keyC和D,完成key的初始化工作。
void InitialKey(char *key, char *outputKeyC, char *outputKeyD);
//根据ScheduleTable判断key要左移的位数
int ShiftTimes(int round);
//根据ShiftTimes的返回值,将两个输入分别左移相应的位数
void Shift(char *inputC, char *inputD,int round);
//将2个28位的输入key合并成56位,并根据PC2Table表格,转换成48位的key输出
void PermuChoiceTwo(char *inputC, char *inputD, char *result);
public:
//向外提供的方法1: DES构造函数
DES(char dataParam[] , char keyParam[],int , int );
//向外提供的方法2: 实现加解密函数
void Encry( int round,char *result,char flag);
//向外提供的方法3: 产生中间key的函数
void GenerateKey( char *result, int round);
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -