📄 des3_encrypt.h
字号:
#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 + -