📄 des.cpp
字号:
#include "Cipher.h"
void main()
{
cout<<"***************DES加解密**************"<<endl<<endl;
text3_index = 0;
char ch;
do{
int choice;
do{
cout<<"Choose Please:"<<endl;
cout<<"1.DES加密"<<endl;
cout<<"2.DES解密"<<endl;
cin>>choice;
}while(choice!=1&&choice!=2);
int keylen;
int textblk[64];
char textblock[8];
int index;
switch(choice){
case 1:
cout<<"请输入明文:";
cin>>text1;
keylen = 0;
do{
cout<<"请输入密钥(长度为7个字节):";
cin>>key;
keylen=strlen(key);
}while(keylen<7||keylen>7);
SKeyProduce(key); //生成16轮的密钥,存于全局变量SubKey中
char *tp;
tp=text1;
while(true){
if(strlen(tp)>8){
strncpy(textblock,tp,8); //注意textblock没有结束符
/*处理明文块*/
index=63;
for(int i=7;i>=0;i--){
for(int j=0;j<8;j++){
textblk[index--]=(int)textblock[i]%2;
textblock[i]=textblock[i]/2;
}
}
cipher(textblk,choice);
tp=tp+8;
}
else if(strlen(tp)==8){
strncpy(textblock,tp,8); //注意textblock没有结束符
/*处理明文块*/
index=63;
for(int i=7;i>=0;i--){
for(int j=0;j<8;j++){
textblk[index--]=(int)textblock[i]%2;
textblock[i]=textblock[i]/2;
}
}
cipher(textblk,choice);
break;
}
else{
strcpy(textblock,tp);
int k=strlen(textblock)+1; //若不足64位,则用0000 0000补足,存在结束符
while(k<8)textblock[k++]=NULL;
/*处理明文块*/
index=63;
for(int i=7;i>=0;i--){
for(int j=0;j<8;j++){
textblk[index--]=(int)textblock[i]%2;
textblock[i]=textblock[i]/2;
}
}
cipher(textblk,choice);
break;
}
}
break;
case 2:
index = 0;
while(index<text3_index){
for(int k=0;k<64;k++)
textblk[k] = text3[index+k];
cipher(textblk,choice);
index+=64;
}
break;
}
cout<<"经加(解)密后:";
cout<<text2<<endl;
int text2_len = strlen(text2);
for(int y=0;y<text2_len;y++)
text2[y]=NULL;
/* file.open("file.txt",ios::out|ios::trunc,0);
if(!file){
cout<<"Can not open cleartext.txt file to write!"<<endl;
cin.get();
return;
}
file<<text2;
file.close();
*/
cout<<"Want to quit now?(Y/y or N/n)";
cin>>ch;
}while(ch!='Y'&&ch!='y');
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -