📄 hill.cpp
字号:
#include<stdio.h>
void encrypt2(void);
void decrypt2(void);
void encrypt3(void);
void decrypt3(void);
void frequency(void);
void main(){
encrypt2();
decrypt2();
encrypt3();
decrypt3();
frequency();
}
void encrypt2(void){
char c;
int i=0,j=0,counter=0;
int metrix[2][2]={{11,8},{3,7}};
int *temp,*result;
temp=new int[2];
result=new int[2];
for(i=0;i<=1;i++)
result[i]=0;
FILE * hill21fptr,*hill22fptr;
if((hill21fptr=fopen("31.txt","r"))==NULL||(hill22fptr=fopen("32.txt","w"))==NULL)
printf("ERROR\n");
else{
for(i=0;i<=1;i++){
c=fgetc(hill21fptr);
if(c==EOF)
break;
else{
temp[i]=c-'a';
counter++;
if(counter%2==0){
for(i=0;i<=1;i++)
for(j=0;j<=1;j++)
result[i]+=temp[j]*metrix[j][i];
for(i=0;i<=1;i++)
fputc(result[i]%26+'A',hill22fptr);
for(i=0;i<=1;i++)
result[i]=0;
i=-1;
}
}
}
}
fclose(hill21fptr);
fclose(hill22fptr);
}
void decrypt2(void){
char c;
int i=0,j=0,counter=0;
int metrix[2][2]={{7,18},{23,11}};
int *temp,*result;
temp=new int[2];
result=new int[2];
for(i=0;i<=1;i++)
result[i]=0;
FILE * hill22fptr,*hill23fptr;
if((hill22fptr=fopen("32.txt","r"))==NULL||(hill23fptr=fopen("33.txt","w"))==NULL)
printf("ERROR\n");
else{
for(i=0;i<=1;i++){
c=fgetc(hill22fptr);
if(c==EOF)
break;
else{
temp[i]=c-'A';
counter++;
if(counter%2==0){
for(i=0;i<=1;i++)
for(j=0;j<=1;j++)
result[i]+=temp[j]*metrix[j][i];
for(i=0;i<=1;i++)
fputc(result[i]%26+'a',hill23fptr);
for(i=0;i<=1;i++)
result[i]=0;
i=-1;
}
}
}
}
fclose(hill22fptr);
fclose(hill23fptr);
}
void encrypt3(void){
char c;
int i=0,j=0,counter=0;
int metrix[3][3]={{10,5,12},{3,14,21},{8,9,11}};
int *temp,*result;
temp=new int[3];
result=new int[3];
for(i=0;i<=2;i++)
result[i]=0;
FILE * hill34fptr,*hill35fptr;
if((hill34fptr=fopen("34.txt","r"))==NULL||(hill35fptr=fopen("35.txt","w"))==NULL)
printf("ERROR\n");
else{
for(i=0;i<=2;i++){
c=fgetc(hill34fptr);
if(c==EOF)
break;
else{
temp[i]=c-'a';
counter++;
if(counter%3==0){
for(i=0;i<=2;i++)
for(j=0;j<=2;j++)
result[i]+=(temp[j]*metrix[j][i]);
for(i=0;i<=2;i++)
fputc(result[i]%26+'A',hill35fptr);
for(i=0;i<=2;i++)
result[i]=0;
i=-1;
}
}
}
}
fclose(hill34fptr);
fclose(hill35fptr);
}
void decrypt3(void){
char c;
int i=0,j=0,counter=0;
int metrix[3][3]={{21,15,17},{23,2,16},{25,4,3}};
int *temp,*result;
temp=new int[3];
result=new int[3];
for(i=0;i<=2;i++)
result[i]=0;
FILE * hill35fptr,*hill36fptr;
if((hill35fptr=fopen("35.txt","r"))==NULL||(hill36fptr=fopen("36.txt","w"))==NULL)
printf("ERROR\n");
else{
for(i=0;i<=2;i++){
c=fgetc(hill35fptr);
if(c==EOF)
break;
else{
temp[i]=c-'A';
counter++;
if(counter%3==0){
for(i=0;i<=2;i++)
for(j=0;j<=2;j++)
result[i]+=(temp[j]*metrix[j][i]);
for(i=0;i<=2;i++)
fputc(result[i]%26+'a',hill36fptr);
for(i=0;i<=2;i++)
result[i]=0;
i=-1;
}
}
}
}
fclose(hill35fptr);
fclose(hill36fptr);
}
void frequency(void){
FILE *fptr;
int i=0,choice=-1,tag,counter[26]={0},sum=0;
float p[26],Ic=0.0;
printf("统计频率菜单:输入1统计明文频率,输入2统计密文频率\n");
scanf("%d",&choice);
switch(choice){
case 1:
fptr=fopen("34.txt","r");
tag=1;
break;
case 2:
fptr=fopen("35.txt","r");
tag=2;
break;
}
char c;
if(tag==1){
while((c=fgetc(fptr))!=EOF){
counter[c-'a']++;
sum++;
}
for(i=0;i<=25;i++){
putchar(i+'a');
printf(": %d\n",counter[i]);
}
printf("%d chars in all\n",sum);
for(i=0;i<=25;i++){
putchar(i+'a');
printf(": %f\n",(float)counter[i]/sum);
}
}
else{
while((c=fgetc(fptr))!=EOF){
counter[c-'A']++;
sum++;
}
for(i=0;i<=25;i++){
putchar(i+'A');
printf(": %d\n",counter[i]);
}
printf("%d chars in all\n",sum);
for(i=0;i<=25;i++){
putchar(i+'A');
printf(": %f\n",(float)counter[i]/sum);
}
}
for(i=0;i<=25;i++){
p[i]=(float)counter[i]/sum;
Ic+=p[i]*p[i];
}
printf("The Ic is %f\n",Ic);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -