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

📄 sceret.cpp

📁 各种加密解密算法,包括hill,vijinia和置换加密等,实现txt文本加解密
💻 CPP
字号:
#include<iostream>
using namespace std;
#include<time.h>
#define name_long 10
#define num 12
int A[num]={1,3,5,7,9,11,15,17,19,21,23,25};
int B[num]={1,9,21,15,3,19,7,23,11,5,17,25};
int all=0;
int Arandom();
int Brandom();
int fre_m[26];
int fre_c[26];
double long out[26];

void cry();
void dec();
void main()
{
	double long total_fre=0;
	for(int m=0;m<26;m++)
	fre_m[m]=fre_c[m]=0;
	int ch;
	cout<<""<<endl;
	if(ch=1)
	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 cry()
{
	FILE *fp1,*fp2,*key;
	char file_name_1[name_long];
	char file_name_2[name_long];
	char ch;
	char cher;
	int f;
	cout<<"请输入你要加密的文件:"<<endl;
	cin>>file_name_1;
	cout<<"请输入你要写入的文件:"<<endl;
	cin>>file_name_2;
	fp1=fopen(file_name_1,"r");
	fp2=fopen(file_name_2,"w");
	key=fopen("key.txt","w");
	int a=Arandom() ,b=Brandom();
	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]++;
				cher=(A[a]*(ch-97)+b)%26+97;
			//	cout<<cher;
				f=(int)(cher-97);
				fre_c[f]++;
				fputc(cher,fp2);
			}
	       
			else
			{
			//	cout<<ch;
				fputc(ch,fp2);
			}
		}
		fputc(a,key);
		fputc(b,key);
		fclose(fp1);
		fclose(fp2);
		fclose(key);
}

int Arandom()
{
	int i = 0;
	srand(time(NULL));
	i = rand()%12;
	return i ;
}
int Brandom()
{
	int j = 0;
	srand(time(NULL));
    j = rand()%26;
	return j;	
}

void dec()
{
	FILE *fp1,*fp2,*key;
	char file_name_1[name_long];
	char file_name_2[name_long];
	char ch;
	char cher;
	int a, b,x;	
	cout<<"请输入你要解密的文件:"<<endl;
	cin>>file_name_1;
	cout<<"请输入你要写入的文件:"<<endl;
	cin>>file_name_2;
	fp1=fopen(file_name_1,"r");
	fp2=fopen(file_name_2,"w");
	key=fopen("key.txt","r");
	if(fp2==NULL)
		cout<<"对不起,要写的文件不能打开"<<endl;
	if(fp1==NULL)
		cout<<"对不起,要解密文件不能打开"<<endl;
	if(key==NULL)
	{
		cout<<"对不起,密钥文件不能打开"<<endl;
	}
	else
	{
		(int)a=fgetc(key);
	    (int)b=fgetc(key);
		while((ch=fgetc(fp1))!=EOF)
		{
			if(ch>='a'&&ch<='z')
			{
				x=B[a]*((ch-97)-b);
				while(x<0)
					x=x+26;
				int c=(int)ch-97;
				fre_c[c]++;
				cher=(x)%26+97;
	//			cout<<cher;
				fputc(cher,fp2);
			}
			else
			{
//				cout<<ch;
				fputc(ch,fp2);
			}
		}
		fclose(fp1);
		fclose(fp2);
		fclose(key);
	}
}

⌨️ 快捷键说明

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