#define BLOCK64 64 // 01位块长度
#define BLOCK8 9 // 8字节明文块长度,由于字符串限制,必须+1
#define EEXTAND 48 // E-拓展串
#define SUBKEYLEN 48 // 子密钥长度
#define SUBKEYNUM 16 // 子密钥数量
#define KEYLEN 64 // 密钥长度
#define NOCHECKDIGITLEN 56 // 非校验位长度
typedef bool des1_t;
typedef unsigned char des8_t;
des8_t block8[BLOCK8]; // 明文
des8_t encodedBlock8[BLOCK8]; // 加密后的明文
des1_t block64[BLOCK64]; // 二进制明文
des1_t encodedBlock64[BLOCK64]; // 加密后的二进制明文
des1_t encodingBlock64[BLOCK64]; // 加密中的二进制明文
des1_t decodedBlock64[BLOCK64]; // 解密后的二进制明文
des8_t decodedBlock8[BLOCK8]; // 解密后的明文
des1_t decodingBlock64[BLOCK64]; // 解密中的二进制明文
char InitKey[KEYLEN / 4 + 1]; // 16进制的输入
des1_t Key[BLOCK64]; // 密钥
des1_t Subkey[SUBKEYNUM][SUBKEYLEN]; // 子密钥
FILE *readFile; // 读取的文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
* 通过密钥生成子密钥,总共生成16个
* @param K des1_t* 密钥
*/
void getSubkey(des1_t *K);
/**
* 8字节 转换成 64位
* @param from des8_t* 源数组
* @param to des1_t* 目标数组
*/
void block8ToBlock64(des8_t *from, des1_t *to);
/**
* 64位 转换为 8字节
* @param from des1_t* 源数组
* @param to des8_t* 目标数组
*/
void block64ToBlock8(des1_t *from, des8_t *to);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20