⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 des.h

📁 该文本对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 + -