/*
1.字节到比特的转换
2.子密钥生成 K 64位的比特串,56位是密钥
*/
#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>
#include <math.h>
using namespace std;
//用到的全局数组
char M[64]; //存放读取文件中的明文
char K[64]; //存放文件中读取的密钥
int LF[16]={1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};//循环左移位数对照表 //存放循环左移后的子密钥
char KEY[16][56]; //存放循环左移后的子密钥
char K2[16][48]; //存放PC-2置换后的子密钥
char R[32]; //存放IP置换后的后32位
char L[32]; //存放前32位
char ER[48];
char ERK[48];
char S_out[32];
char P_out[32];
char C[32];
char CC[64];
char MW[64];
//表IP置换
int IP[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};
//表IP-1置换
int IP_Ni[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};
//PC_1置换表(64-->56)
int PC_1[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 };
//PC_2置换表(56-->48)
int PC_2[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,