⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 des.cpp

📁 DES算法的加解密实现,Visual C++实现
💻 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 + -