fp2=fopen(\if(fp1==NULL||fp2==NULL) {
MessageBox(\明文和密钥文件打开失败!\ return; }
for(i=0;i<8;i++) {
fscanf(fp1,\ fscanf(fp2,\}
fclose(fp1); fclose(fp2); FILE *fp4,*fp5; char ch;
fp4=fopen(\明文二进制.txt\fp5=fopen(\密钥二进制.txt\k=0;
for(i=0;i<8;i++) {
ch=mingwen[i]; for(j=0;j<8;j++) {
str[j]=ch%2; ch=ch/2; }
for(j=7;j>=0;j--) {
mingwenB[k]=str[j]; k++;
fprintf(fp4,\ } }
fclose(fp4); k=0;
for(i=0;i<8;i++) {
ch=miyao[i]; for(j=0;j<8;j++) {
str[j]=ch%2; ch=ch/2; }
for(j=7;j>=0;j--)
16
{
miyaoB[k]=str[j]; k++;
fprintf(fp5,\ } }
fclose(fp5); m_Mingwen=\for(i=0;i<64;i++) //二进制明文显示在界面上 {
m_Mingwen=m_Mingwen+(char)(48+mingwenB[i]); if((i+1)%8==0)
m_Mingwen=m_Mingwen+\}
m_Miyao=\
for(i=0;i<64;i++) //二进制密钥显示在界面上 {
m_Miyao=m_Miyao+(char)(48+miyaoB[i]); if((i+1)%8==0)
m_Miyao=m_Miyao+\}
/*初始置换IP*/
int 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}; int afterIP[64]; for(j=0;j<64;j++) {
afterIP[j]=mingwenB[IP_table[j]-1]; }
/*明文的第零次分组,L0[32],R0[32]*/ int L0[32],R0[32]; for(i=0;i<32;i++) L0[i]=afterIP[i];
for(j=0,i=32;i<64;i++,j++) R0[j]=afterIP[i]; /*十六轮子密钥的生成*/ int pc_1table[56]={
//pc_1置换表
17
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};
int pc_2table[48]={ //pc_2置换表 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,45,33,48, 44,49,39,56,34,53, 46,42,50,36,29,32}; int afterpc_1[56]; /*经过pc_1置换*/ for(i=0;i<56;i++)
afterpc_1[i]=miyaoB[pc_1table[i]-1]; /*密钥第0次分组*/ int C0[28],D0[28]; for(i=0;i<28;i++)
C0[i]=afterpc_1[i]; for(j=0,i=28;i<56;i++,j++) D0[j]=afterpc_1[i];
/*十六轮子密钥产生前的中间数据,左移产生的C[16][28],D[16][28]*/ int C[16][28],D[16][28]; for(i=0;i<27;i++) //第一轮数据生成C[0][28]与D[0][28] {
C[0][i]=C0[i+1]; D[0][i]=D0[i+1]; }
C[0][27]=C0[0]; D[0][27]=D0[0]; for(i=1;i<16;i++) //第二轮数据至第十六轮数据生成 { if(i==1||i==8||i==15) { for(j=0;j<27;j++) //左移1位 {
C[i][j]=C[i-1][j+1]; D[i][j]=D[i-1][j+1]; }
C[i][27]=C[i-1][0];
18
D[i][27]=D[i-1][0]; } else {
for(j=0;j<26;j++) {
C[i][j]=C[i-1][j+2]; D[i][j]=D[i-1][j+2]; }
C[i][26]=C[i-1][0]; C[i][27]=C[i-1][1]; D[i][26]=D[i-1][0]; D[i][27]=D[i-1][1]; } }
/*十六轮子密钥初始数据合并,为pc_2置换生成子密钥做准备*/ int beforekey[16][56]; k=0;
for(i=0;i<16;i++) {
for(j=0;j<28;j++)
beforekey[i][j]=C[i][j]; for(k=0;k<28;k++,j++)
beforekey[i][j]=D[i][k]; }
/*beforekey[16][56]经过pc_2置换,生成16轮子密钥key[16][48]*/ int keys[16][48]; for(i=0;i<16;i++) for(j=0;j<48;j++)
keys[i][j]=beforekey[i][pc_2table[j]-1];
/*十六轮循环生成密文,首先是L[16][32]和R[16][32]的生成*/ int L[16][32],R[16][32]; int 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,31}; int afterER0[48],beforeS[48];
19
for(i=0;i<32;i++) //Li=R(i-1) L[0][i]=R0[i]; for(i=0;i<48;i++) //E置换,生成48位数据,与子密钥进行异或,为进入S盒做准备
afterER0[i]=R0[E_table[i]-1]; for(i=0;i<48;i++)
if(afterER0[i]==keys[0][i]) beforeS[i]=0; else
beforeS[i]=1;
/*将beforeS[48]分在8个数组中,为经过8个S盒准备*/ int beforeSBox[8][6]; k=0;
for(i=0;i<8;i++) for(j=0;j<6;j++) {
beforeSBox[i][j]=beforeS[k]; k++; }
/* S盒变换,48位数据生成32位数据*/ int afterSBox[8];
int SBox[8][4][16]={ //S盒变换表 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,3,10,5,0, 15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13, 15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10, 3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5, 0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15, 13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9, 10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8, 13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1, 13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7, 1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12, 7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15, 13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9, 10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4, 3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14, 2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9, 14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6, 4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14, 11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3, 12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11, 10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,
20
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库DES加密算法课程设计报告(4)在线全文阅读。
相关推荐: