📄 sceret.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 + -