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

📄 des3_encrypt.h

📁 跨操作系统的微型中间件
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifdef WIN32/*********************************************************************************	FileName:	FastDes.h****	Project:	Electronic Funds Transfer (EFT)****	Purpose:	An improvement of DES****	Public Functions:	des_crypt**						set_key****	Note:		Used in case of 32bits long integer.****	Modified History:**		12/9/95		created		by JinMing*******************************************************************************/#ifndef __FASTDES_H__#define __FASTDES_H__#define DES_ENCRYPT	1#define DES_DECRYPT	0#define ROUNDS 16typedef struct{	unsigned long half[2];} des_keys;/***	Change 4 chars to unsigned long integer*///注意:按照低字节在前,高字节在后的规则完成4BYTE-》UInt32以及UInt32-》4BYTE#define c2l(c,l)	(l =((unsigned long)(*((c)++))) , \			 l = (l<<8) | ((unsigned long)(*((c)++))) , \			 l = (l<<8) | ((unsigned long)(*((c)++))) , \			 l = (l<<8) | ((unsigned long)(*((c)++))) )/***	Change unsigned long integer to 4 chars*/#define l2c(l,c)	(*((c)++)=(unsigned char)(((l)>>24)&0xff), \			 *((c)++)=(unsigned char)(((l)>>16)&0xff), \			 *((c)++)=(unsigned char)(((l)>> 8)&0xff), \			 *((c)++)=(unsigned char)(((l)    )&0xff))#define OP_TWO(x,y,temp,n,m) ((temp)=((((x)>>(n))^(y))&(m)),\	(y)^=(temp),\	(x)^=((temp)<<(n)))#define OP_ONE(a,temp,n,m) ((temp)=((((a)<<(n))^(a))&(m)),\	(a)^=((temp)|(temp>>(n))) )static const int left_shift[16]={0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0};/***	The initialize permution of source data*/#define IP(l,r) \	{ \	register unsigned long t; \	OP_TWO(l,r,t, 4,0x0f0f0f0fL); \	OP_TWO(l,r,t,16,0x0000ffffL); \	OP_TWO(r,l,t, 2,0x33333333L); \	OP_TWO(r,l,t, 8,0x00ff00ffL); \	OP_TWO(l,r,t, 1,0x55555555L); \	}/***	The reverse initialize permution*/#define FP(l,r) \	{ \	register unsigned long t; \	OP_TWO(l,r,t, 1,0x55555555L); \	OP_TWO(r,l,t, 8,0x00ff00ffL); \	OP_TWO(r,l,t, 2,0x33333333L); \	OP_TWO(l,r,t,16,0x0000ffffL); \	OP_TWO(l,r,t, 4,0x0f0f0f0fL); \	}#define ENCRYPT_R(L,R,temp1,temp2,subkeys,key_index)	\	temp1=((R>>3) | (R<<29)) ^ subkeys[key_index] ; \	temp2=((R<<1) | (R>>31)) ^ subkeys[key_index+1] ; \        L^=     S_P[1][(temp2>>24)&0x3f]| \                S_P[3][(temp2>>16)&0x3f]| \                S_P[5][(temp2>>8 )&0x3f]| \                S_P[7][(temp2    )&0x3f]| \                S_P[0][(temp1>>24)&0x3f]| \                S_P[2][(temp1>>16)&0x3f]| \                S_P[4][(temp1>> 8)&0x3f]| \                S_P[6][(temp1    )&0x3f];class DES3_Encrypt{public:	DES3_Encrypt();	~DES3_Encrypt();	UInt32 des3_crypt(unsigned char * data_in, unsigned char * data_out);			UInt32 get_des3_key(unsigned char * key1, unsigned char* key2);	UInt32 set_des3_key(char* strLicenseSerial);	private:		unsigned char k1[8], k2[8];	/*	**	Prototype of functions	*/	void des_crypt ( unsigned char * data_in, unsigned char * data_out, 		 des_keys ks[16], int encrypt_flag ) ;	int set_key ( unsigned char *key, des_keys ks[16]);	};static const unsigned char des_key1_array[16][8] = {	{'1', '4', 'w', '4', '@', '^', 'e', '2',},	{'2', '4', 'w', '4', '@', '^', 'e', '2',},	{'3', '4', 'w', '4', '@', '^', 'e', '2',},	{'4', '4', 'w', '4', '@', '^', 'e', '2',},	{'5', '4', 'w', '4', '@', '^', 'e', '2',},	{'6', '4', 'w', '4', '@', '^', 'e', '2',},	{'7', '4', 'w', '4', '@', '^', 'e', '2',},	{'8', '4', 'w', '4', '@', '^', 'e', '2',},	{'9', '4', 'w', '4', '@', '^', 'e', '2',},	{'a', '4', 'w', '4', '@', '^', 'e', '2',},	{'b', '4', 'w', '4', '@', '^', 'e', '2',},	{'c', '4', 'w', '4', '@', '^', 'e', '2',},	{'d', '4', 'w', '4', '@', '^', 'e', '2',},	{'e', '4', 'w', '4', '@', '^', 'e', '2',},	{'f', '4', 'w', '4', '@', '^', 'e', '2',},	{'g', '4', 'w', '4', '@', '^', 'e', '2',}};static const unsigned char des_key2_array[16][8] = {	'1', '5', 'w', '4', '@', '^', 'e', '2',	'2', '5', 'w', '4', '@', '^', 'e', '2',	'3', '5', 'w', '4', '@', '^', 'e', '2',	'4', '5', 'w', '4', '@', '^', 'e', '2',	'5', '5', 'w', '4', '@', '^', 'e', '2',	'6', '5', 'w', '4', '@', '^', 'e', '2',	'7', '5', 'w', '4', '@', '^', 'e', '2',	'8', '5', 'w', '4', '@', '^', 'e', '2',	'9', '5', 'w', '4', '@', '^', 'e', '2',	'a', '5', 'w', '4', '@', '^', 'e', '2',	'b', '5', 'w', '4', '@', '^', 'e', '2',	'c', '5', 'w', '4', '@', '^', 'e', '2',	'd', '5', 'w', '4', '@', '^', 'e', '2',	'e', '5', 'w', '4', '@', '^', 'e', '2',	'f', '5', 'w', '4', '@', '^', 'e', '2',	'g', '5', 'w', '4', '@', '^', 'e', '2'};/***	Table of S box and P permution tranformation*/static const unsigned long S_P[8][64]={{/* s_box & P perm 00x00000000L, 0x00000002L, 0x00000200L, 0x00000202L, 0x00008000L, 0x00008002L, 0x00008200L, 0x00008202L, 0x00800000L, 0x00800002L, 0x00800200L, 0x00800202L, 0x00808000L, 0x00808002L, 0x00808200L, 0x00808202L, */0x00808200L, 0x00000000L, 0x00008000L, 0x00808202L, 0x00808002L, 0x00008202L, 0x00000002L, 0x00008000L, 0x00000200L, 0x00808200L, 0x00808202L, 0x00000200L, 0x00800202L, 0x00808002L, 0x00800000L, 0x00000002L, 0x00000202L, 0x00800200L, 0x00800200L, 0x00008200L, 0x00008200L, 0x00808000L, 0x00808000L, 0x00800202L, 0x00008002L, 0x00800002L, 0x00800002L, 0x00008002L, 0x00000000L, 0x00000202L, 0x00008202L, 0x00800000L, 0x00008000L, 0x00808202L, 0x00000002L, 0x00808000L, 0x00808200L, 0x00800000L, 0x00800000L, 0x00000200L, 0x00808002L, 0x00008000L, 0x00008200L, 0x00800002L, 0x00000200L, 0x00000002L, 0x00800202L, 0x00008202L, 0x00808202L, 0x00008002L, 0x00808000L, 0x00800202L, 0x00800002L, 0x00000202L, 0x00008202L, 0x00808200L, 0x00000202L, 0x00800200L, 0x00800200L, 0x00000000L, 0x00008002L, 0x00008200L, 0x00000000L, 0x00808002L, },{/* s_box & P perm 10x00000000L, 0x00004000L, 0x40000000L, 0x40004000L, 0x00000010L, 0x00004010L, 0x40000010L, 0x40004010L, 0x00080000L, 0x00084000L, 0x40080000L, 0x40084000L, 0x00080010L, 0x00084010L, 0x40080010L, 0x40084010L, */0x40084010L, 0x40004000L, 0x00004000L, 0x00084010L, 0x00080000L, 0x00000010L, 0x40080010L, 0x40004010L, 0x40000010L, 0x40084010L, 0x40084000L, 0x40000000L, 0x40004000L, 0x00080000L, 0x00000010L, 0x40080010L, 0x00084000L, 0x00080010L, 0x40004010L, 0x00000000L, 0x40000000L, 0x00004000L, 0x00084010L, 0x40080000L, 0x00080010L, 0x40000010L, 0x00000000L, 0x00084000L, 0x00004010L, 0x40084000L, 0x40080000L, 0x00004010L, 0x00000000L, 0x00084010L, 0x40080010L, 0x00080000L, 0x40004010L, 0x40080000L, 0x40084000L, 0x00004000L, 0x40080000L, 0x40004000L, 0x00000010L, 0x40084010L, 0x00084010L, 0x00000010L, 0x00004000L, 0x40000000L, 0x00004010L, 0x40084000L, 0x00080000L, 0x40000010L, 0x00080010L, 0x40004010L, 0x40000010L, 0x00080010L, 0x00084000L, 0x00000000L, 0x40004000L, 0x00004010L, 0x40000000L, 0x40080010L, 0x40084010L, 0x00084000L, },{/* s_box & P perm 20x00000000L, 0x04000000L, 0x00000004L, 0x04000004L, 0x00010000L, 0x04010000L, 0x00010004L, 0x04010004L, 0x00000100L, 0x04000100L, 0x00000104L, 0x04000104L, 0x00010100L, 0x04010100L, 0x00010104L, 0x04010104L, */0x00000104L, 0x04010100L, 0x00000000L, 0x04010004L, 0x04000100L, 0x00000000L, 0x00010104L, 0x04000100L, 0x00010004L, 0x04000004L, 0x04000004L, 0x00010000L, 0x04010104L, 0x00010004L, 0x04010000L, 0x00000104L, 0x04000000L, 0x00000004L, 0x04010100L, 0x00000100L, 0x00010100L, 0x04010000L, 0x04010004L, 0x00010104L, 0x04000104L, 0x00010100L, 0x00010000L, 0x04000104L, 0x00000004L, 0x04010104L, 0x00000100L, 0x04000000L, 0x04010100L, 0x04000000L, 0x00010004L, 0x00000104L, 0x00010000L, 0x04010100L, 0x04000100L, 0x00000000L, 0x00000100L, 0x00010004L, 0x04010104L, 0x04000100L, 0x04000004L, 0x00000100L, 0x00000000L, 0x04010004L, 0x04000104L, 0x00010000L, 0x04000000L, 0x04010104L, 0x00000004L, 0x00010104L, 0x00010100L, 0x04000004L, 0x04010000L, 0x04000104L, 0x00000104L, 0x04010000L, 0x00010104L, 0x00000004L, 0x04010004L, 0x00010100L, },{/* s_box & P perm 30x00000000L, 0x80000000L, 0x00400000L, 0x80400000L, 0x00001000L, 0x80001000L, 0x00401000L, 0x80401000L, 0x00000040L, 0x80000040L, 0x00400040L, 0x80400040L, 0x00001040L, 0x80001040L, 0x00401040L, 0x80401040L, */0x80401000L, 0x80001040L, 0x80001040L, 0x00000040L, 0x00401040L, 0x80400040L, 0x80400000L, 0x80001000L, 0x00000000L, 0x00401000L, 0x00401000L, 0x80401040L, 0x80000040L, 0x00000000L, 0x00400040L, 0x80400000L, 0x80000000L, 0x00001000L, 0x00400000L, 0x80401000L, 0x00000040L, 0x00400000L, 0x80001000L, 0x00001040L, 0x80400040L, 0x80000000L, 0x00001040L, 0x00400040L, 0x00001000L, 0x00401040L, 0x80401040L, 0x80000040L, 0x00400040L, 0x80400000L, 0x00401000L, 0x80401040L, 0x80000040L, 0x00000000L, 0x00000000L, 0x00401000L, 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -