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

📄 sceret.cpp

📁 各种加密解密算法,包括hill,vijinia和置换加密等,实现txt文本加解密
💻 CPP
字号:
#include<iostream>
#include<fstream>
#include<time.h>

using namespace std;
#define num 26
#define name_long 10
#define length 256
int all=0;
int fre_m[26];
int fre_c[26];
double long out[26];
char table[num+1][num+1];
char key[length];
int order[length];
int number;

void input();
void getkey();


void cry();
void dec();
void main()
{
	double long total_fre=0;
	input();
	getkey();
	cry();
	for(int i=0;i<26;i++)
	{
		out[i]=((double long)fre_m[i]/(double long)all);
		cout<<"字母"<<(char)(i+97)<<"出现的概率是"<<out[i]<<endl;
		total_fre=total_fre+out[i]*out[i];
	}
	cout<<"重合指数为"<<total_fre<<endl;
	for(i=0;i<26;i++)
		out[i]=0;
	total_fre=0;
	for( i=0;i<26;i++)
	{
		out[i]=((double long)fre_c[i]/(double long)all);
		cout<<"字母"<<(char)(i+97)<<"出现的概率是"<<out[i]<<endl;
		total_fre=total_fre+out[i]*out[i];
	}
	cout<<"重合指数为"<<total_fre<<endl;
	dec();
}
void input()
{
    fstream   file("change.txt",fstream::in); 
    if(!file)   cout<<"error"<<endl;  
	for(int i=0;i<num+1;i++)
		for(int j=0;j<num+1;j++)
			file>>table[i][j];
		file.close;
}
void getkey()
{
	cout<<"请输入密码位数:"<<endl;
	cin>>number;
	srand(time(NULL));
	cout<<"随机生成密钥为"<<endl;
	for(int i=0;i<number;i++)
	{
		int j ;
		j= rand()%26;
		key[i]=(char)(j+97);
		cout<<key[i];
		for(int x=0;x<num+1;x++)
			if(table[x][0]==key[i])
			{
				order[i]=x;
				break;
			}			
	}
	cout<<endl;
}

void cry()
{
	FILE *fp1,*fp2;
	char file_name_1[name_long];
	char file_name_2[name_long];
	char ch;
	char cher;
	int x,y,f,h=0;
	cout<<"请输入你要加密的文件:"<<endl;
	cin>>file_name_1;
	cout<<"请输入你要写入的文件:"<<endl;
	cin>>file_name_2;
	fp1=fopen(file_name_1,"r");
	fp2=fopen(file_name_2,"w");
	if(fp2==NULL)
		cout<<"对不起,要写的文件不能打开"<<endl;
	if(fp1==NULL)
		cout<<"对不起,要读的文件不能打开"<<endl;
	else
		while((ch=fgetc(fp1))!=EOF)
		{			
			if(ch>='a'&&ch<='z')
			{
				all++;
				f=(int)(ch-97);
				fre_m[f]++;
				x=order[h];
				for(y=0;y<num+1;y++)
					if(ch==table[0][y])
						break;
					h=(h++)%number;
					if(h==number)
						h=0;
					cher=table[x][y];
				//	cout<<cher;
					f=(int)(cher-65);
					fre_c[f]++;
					fputc(cher,fp2);
			}
			else if(ch>='A'&&ch<='Z')
			{
				all++;
				f=(int)(ch-65);
				ch=(char)(f+97);
				fre_m[f]++;
				x=order[h];
				for(y=0;y<num+1;y++)
					if(ch==table[0][y])
						break;
					h=(h++)%number;
					if(h==number)
						h=0;
					cher=table[x][y];
				//	cout<<cher;
					f=(int)(cher-65);
					fre_c[f]++;
					fputc(cher,fp2);
			}
			else
			{
			//	cout<<ch;
				fputc(ch,fp2);
			}
		}
		fclose(fp1);
		fclose(fp2);
}


void dec()
{
	FILE *fp1,*fp2;
	char file_name_1[name_long];
	char file_name_2[name_long];
	char ch;
	char cher;	
	int i=0;
	cout<<"请输入你要解密的文件:"<<endl;
	cin>>file_name_1;
	cout<<"请输入你要写入的文件:"<<endl;
	cin>>file_name_2;
	fp1=fopen(file_name_1,"r");
	fp2=fopen(file_name_2,"w");
	if(fp2==NULL)
		cout<<"对不起,要写的文件不能打开"<<endl;
	if(fp1==NULL)
		cout<<"对不起,要解密文件不能打开"<<endl;
	else
	{
		while((ch=fgetc(fp1))!=EOF)
		{
			if(ch>='A'&&ch<='Z')
			{
				for(int j=0;j<num+1;j++)
					if(ch==table[order[i]][j])
					{
						cher=table[0][j];
					//	cout<<cher;
						fputc(cher,fp2);
						i=(i++)%number;
						if(i==number)
							i=0;
						break;
					}
			}
			else
			{
			//	cout<<ch;
				fputc(ch,fp2);
			}
		}
		fclose(fp1);
		fclose(fp2);
	}
}

⌨️ 快捷键说明

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