📄 main.cpp
字号:
#include "des.h"
#include "Table.h"
void jiemi()//(char mingwen2[])
{
char soc[8];
int k[64],key[16][48],ke[64],lbit[28],rbit[28],key_temp[56];
//密钥处理
char fming[20],fmi[20];
cout<<"请输入密钥(7位)"<<endl;
cin>>soc;
cout<<"请输入你要解密的文件名(加上后缀)"<<endl;
cin>>fmi;
cout<<"请输入你要存放明文的文件名(加上后缀)"<<endl;
cin>>fming;
ofstream f_ming;
f_ming.open(fming,ios::binary);
ifstream f_mi;
f_mi.open(fmi,ios::binary);
Char_Binint(k,soc);
Add_Check(k);
Mutation(PC1_Table,k,ke,56);
Average(lbit,rbit,ke,56);
for(int i=0;i<16;i++)
{
L_Shift(lbit,rbit,LOOP_Table[i]);
Unite(lbit,rbit,key_temp,56);
Mutation(PC2_Table,key_temp,key[i],48);
}
// 解密过程
do{
char mi_ming[9];
int lp[32],rp[32],mingp[64],mingf[64],res[64];
char mingwen[9];
f_mi.read(mingwen,8*sizeof(char));
mingwen[8]='\0';
if(f_mi.eof())
break;
//Char_Binint(ming,mingwen);
int x,k1,m,len;
int ming[64];
int bit_temp[100];
int biaozhi[8]={0,0,0,0,0,0,0,0};
for(int j=0;j<8;j++)
{
k1=(int)mingwen[j];
if(k1<0)
{
k1=-k1;
biaozhi[j]=1;
}
for(x=0;x<8;x++)
{
bit_temp[j*8+x]=k1%2;
if(k1==0)
break;
k1=k1/2;
}
if(x!=7)//不足八位的添0;
for(x;x<8;x++)
bit_temp[j*8+x]=0;
}
//更改循序
for(int j=0;j<8;j++)
for(x=0;x<8;x++)
ming[j*8+x]=bit_temp[j*8+7-x];
for(int i=0;i<8;i++)
if(biaozhi[i]==1)
{
//取反
for(int j=0;j<8;j++)
{
ming[i*8+j]=(ming[i*8+j]+1)%2;
}
//加一
for(int j=7;j>=0;j--)
if(ming[i*8+j]==0)
{
ming[i*8+j]=1;
for(int rem=j+1;rem<8;rem++)
ming[i*8+rem]=0;
break;
}
}//还原出正确的密文二进制码
/*for(int we=0;we<64;we++)
{
if(we%8==0)
cout<<endl;
cout<<ming[we];
}*/
Mutation(IP_Table,ming,mingp,64);
Average(lp,rp,mingp,64);
int minge[48],mings[32],mingl[32],temp[32];
for(int i=0;i<16;i++)
{
Mutation(E_Table,rp,minge,48);
Yihou(key[15-i],minge,48);
S_box(minge,mings);
Mutation(P_Table,mings,mingl,32);
Yihou(mingl,lp,32);
//左右交换
if(i!=15){
for(int j=0;j<32;j++)
{
temp[j]=lp[j];
lp[j]=rp[j];
rp[j]=temp[j];
}
}
}
Unite(lp,rp,mingf,64);
Mutation(IPR_Table,mingf,res,64);
Int_Char(mi_ming,res);
f_ming.write(mi_ming,8*sizeof(char));
}while(1);
cout<<"完成解密。"<<endl;
f_ming.close();
f_mi.close();
}
void jiami()
{
char soc[8];
int k[64],key[16][48],ke[64],lbit[28],rbit[28],key_temp[56];
char fming[20],fmi[20];
cout<<"请输入密钥(7位)"<<endl;
cin>>soc;
cout<<"请输入你要加密的文件名(加上后缀)"<<endl;
cin>>fming;
cout<<"请输入你要存放密文的文件名(加上后缀)"<<endl;
cin>>fmi;
ifstream f_ming;
f_ming.open(fming,ios::binary);
ofstream f_mi;
f_mi.open(fmi,ios::binary);
//密钥处理
Char_Binint(k,soc);
/*for(int x=0;x<56;x++)
{
if((x)%8==0)
cout<<endl;
cout<<k[x];
}
cout<<endl;*/
Add_Check(k);
/*for(int x=0;x<64;x++)
{
if((x)%8==0)
cout<<endl;
cout<<k[x];
}*/
Mutation(PC1_Table,k,ke,56);
Average(lbit,rbit,ke,56);
for(int i=0;i<16;i++)
{
L_Shift(lbit,rbit,LOOP_Table[i]);
Unite(lbit,rbit,key_temp,56);
Mutation(PC2_Table,key_temp,key[i],48);
}
// 加密过程
char mingwen[9];
char mi_ming[9];
int ming[64],lp[32],rp[32],mingp[64],mingf[64],res[64];
//cout<<"请输入明文(8位)"<<endl;
//cin>>mingwen;
//getchar();
do{
f_ming.read(mingwen,8*sizeof(char));
mingwen[8]='\0';
if(f_ming.eof())
break;
Char_Binint(ming,mingwen);
Mutation(IP_Table,ming,mingp,64);
Average(lp,rp,mingp,64);
int minge[48],mings[32],mingl[32],temp[32];
for(int i=0;i<16;i++)
{
Mutation(E_Table,rp,minge,48);
//int keyt[48];
//for(int j=0;j<48;j++)
//keyt[j]=key[i][j];
Yihou(key[i],minge,48);
S_box(minge,mings);
Mutation(P_Table,mings,mingl,32);
Yihou(mingl,lp,32);
//左右交换
if(i!=15){
for(int j=0;j<32;j++)
{
temp[j]=lp[j];
lp[j]=rp[j];
rp[j]=temp[j];
}
}
}
Unite(lp,rp,mingf,64);
Mutation(IPR_Table,mingf,res,64);
/*// 显示密文的二进制码
for(int we=0;we<64;we++)
{
if(we%8==0)
cout<<endl;
cout<<res[we];
}*/
Int_Char(mi_ming,res);
//for(int i=0;i<8;i++)
// cout<<mi_ming[i];
//cout<<endl<<endl;
f_mi.write(mi_ming,8*sizeof(char));
}while(1);
cout<<"完成加密。"<<endl;
f_ming.close();
f_mi.close();
}
void main()
{
char i;
do{
printf("1.jiami\n2.jiemi\n3.quit\n");
scanf("%s",&i);
//getchar();
if(i>=65&&i<=122)
{
printf("wrong xuan xiang\n");
continue;
}
switch (i)
{
case '1': jiami();
break;
case '2': jiemi();
break;
case '3': exit(0);
break;
default : printf("wrong xuan xiang\n");
}
}while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -