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

📄 7.cpp

📁 可以实现Vigenere密码算法
💻 CPP
字号:
#include<stdio.h>
#include<iostream.h>

void Encry(char l[], char m[], int length1, int length2){
	//加密函数
	//数组l存明文,m存密钥;length1为明文长度,length2为密钥长度
    FILE* fp2;//用来放加密后的密文
    if((fp2=fopen("c.txt","r+"))==NULL)    
    {    
        cout<<"c.txt open error!";    
        return;    
    } 
	int j=0;
	char n[50];
	for(int i=0; i<length1; i++){
		if(l[i]==' ')//读到明文中的空格时
			cout<<l[i];
		else{//读到明文中除空格外的其他字符
			if(l[i]>=97&&l[i]<=122)//如果读到的字符是小写字母时
				l[i]=l[i]-32;//将小写字母转换成大写字母
			n[j]=l[i]-65+(m[j%length2]);//数组n存加密后的密文
			if(n[j]>'Z')//当算出的结果字符的ASCII码大于Z时
				n[j]=n[j]-26;
			cout<<n[j];
			fputc(n[j],fp2);//将加密后的字符逐个输出到c.txt中
			j++;
		}
	}
	cout<<endl;
}

void Decry(char p[], char q[], int length1, int length2){
	//解密函数
	//数组p存密钥,q存密文;length1为明文长度,length2为密钥长度
    FILE* fp2;//用来放解密后的明文
    if((fp2=fopen("c.txt","r+"))==NULL)    
    {    
        cout<<"c.txt open error!";    
        return;    
    } 
	int j=0;
	char o[50];
	for(int i=0; i<length1; i++){
		if(q[i]==' ')//读到密文中的空格时
			cout<<q[i];
		else{//读到密文中除空格外的其他字符
			if(q[i]>=97&&q[i]<=122)
				q[i]=q[i]-32;
			o[j]=q[i]+65-(p[j%length2]);//数组o存解密后的明文
			if(o[j]<'A')
				o[j]=o[j]+26;
			cout<<o[j];
			fputc(o[j],fp2);
			j++;
		}
	}
	cout<<endl;
}

void main(){
	char b[50];
	char mingwen[50];
	char miyao[50];
	int x;//x用来判断是进行解密还是加密
    FILE* fp1;   
    FILE* fp2;   
	
    if((fp1=fopen("m.txt","r+"))==NULL)//读入明文或密文文件    
    {    
        cout<<"m.txt open error!";    
        return;    
    } 
	else cout<<"Open successly!"<<endl;
    int i=0;
	while((mingwen[i++]=fgetc(fp1))!=EOF);//用i来记录明文或密文个数
	for(int j=0;j<i-1;j++){
		cout<<mingwen[j];
	}
	cout<<endl;

    if((fp2=fopen("k.txt","r+"))==NULL)//读入密钥文件
    {    
        cout<<"k.txt open error!\n";    
        return;    
    } 
	else cout<<"Open successly!"<<endl;
    int p=0;
	while((miyao[p++]=fgetc(fp2))!=EOF);//用p来记录密钥个数
	for(int q=0;q<p-1;q++){//输出密钥
		cout<<miyao[q];
	}

    cout<<"Please inout a number(1 to Encry,2 to Decry):";
	cin>>x;
	if(x==1){
		Encry(mingwen,miyao,i-1,p-1);//调用加密函数
	}
	else if(x==2){
			Decry(miyao,mingwen,i-1,p-1);//调用解密函数
		}
	else 
		cout<<"Error Input!Please input again:";
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -