江科大信息安全作业 DES 加密解密
编译环境
DEV 5.6 【VS 编译不通过 需要改动】
输入输出
第1行:输入8字符待加密明文。
第2行:输入8字符密钥。
第3行:输出 结果。
第四行:输入解密密钥。(与加密密钥相同 才能正确解密)
第五行:输入解密答案。
代码
#include <stdlib.h>
#include <stdio.h>
// 对明文执行IP置换得到L0,R0 (L左32位,R右32位) [明文操作]
const char IP_Table[64]={
58,50,42,34,26,18,10, 2,60,52,44,36,28,20,12, 4,
62,54,46,38,30,22,14, 6,64,56,48,40,32,24,16, 8,
57,49,41,33,25,17, 9, 1,59,51,43,35,27,19,11, 3,
61,53,45,37,29,21,13, 5,63,55,47,39,31,23,15, 7
};
// 对迭代后的L16,R16执行IP逆置换,输出密文
const char IPR_Table[64]={
40, 8,48,16,56,24,64,32,39, 7,47,15,55,23,63,31,
38, 6,46,14,54,22,62,30,37, 5,45,13,53,21,61,29,
36, 4,44,12,52,20,60,28,35, 3,43,11,51,19,59,27,
34, 2,42,10,50,18,58,26,33, 1,41, 9,49,17,57,25
};
/*--------------------------- 迭代法则 ----------------------------*/
// F函数,32位的R0进行E变换,扩为48位输出 (R1~R16) [备用A] [明文操作]
static char E_Table[48]={
32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9,
8, 9,10,11,12,13,12,13,14,15,16,17,
16,17,18,19,20,21,20,21,22,23,24,25,
24,25,26,27,28,29,28,29,30,31,32, 1
};
// 子密钥K(i)的获取 密钥为K 抛弃第6,16,24,32,40,48,64位 [密钥操作]
// 用PC1选位 分为 前28位C0,后28位D0 两部分
static char PC1_Table[56]={
57,49,41,33,25,17, 9, 1,58,50,42,34,26,18,
10, 2,59,51,43,35,27,19,11, 3,60,52,44,36,
63,55,47,39,31,23,15, 7,62,54,46,38,30,22,
14, 6,61,53,45,37,29,21,13, 5,28,20,12, 4
};
// 对C0,D0分别进行左移,共16次,左移位数与下面对应 [密钥操作]
static char Move_Table[16]={
1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
};
// C1,D1为第一次左移后得到,进行PC2选位,得到48位输出K1 [备用B] [密钥操作]
static char PC2_Table[48]={
14,17,11,24, 1, 5, 3,28,15, 6,21,10,
23,19,12, 4,26, 8,16, 7,27,20,13, 2,
41,52,31,37,47,55,30,40,51,34,33,48,
44,49,39,56,34,53,46,42,50,36,29,32
};
/*------------- F函数 备用A和备用B 异或 得到48位输出 ---------------*/
// 异或后的结果48位分为8组,每组6位,作为8个S盒的输入 [组合操作]
// S盒以6位作为输入(8组),4位作为输出(4*(8组)=32位)
// S工作原理 假设输入为A=abcdef ,则bcde所代表的数是0-15之间的
// 一个数记为 X=bcde ,af代表的是0-3之间的一个数,记为 Y=af
// 在S1的X列,Y行找到一个数Value,它在0-15之间,可以用二进制表示
// 所以为4bit (共32位)
static char S_Box[8][4][16]={
//S1
14, 4,13, 1, 2,15,11, 8, 3,10, 6,12, 5, 9, 0, 7,
0,15, 7, 4,14, 2,13, 1,10, 6,12,11, 9, 5, 3, 8,
4, 1,14, 8,13, 6, 2,11,15,12, 9, 7