📄 vigenere.cpp
字号:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void encrypt(int *,int );
void decrypt(int *,int );
void frequency(void);
void main(){
int i=0,n=0,*key;
printf("输入密钥字长度:\n");
scanf("%d",&n);
srand(time(NULL));
key=new int[n];
for(i=0;i<=n-1;i++){
*(key+i)=rand()%26;
}
printf("密钥生成结果:");
for(i=0;i<=n-1;i++)
printf("%d ",*(key+i));
putchar('\n');
int choice=-1;
printf("主菜单:输入1加密,输入2解密,输入3统计频率,输入-1退出\n");
scanf("%d",&choice);
while(choice!=-1){
switch(choice){
case 1:
encrypt(key,n);
break;
case 2:
decrypt(key,n);
break;
case 3:
frequency();
}
scanf("%d",&choice);
}
}
void encrypt(int *key,int n){
int counter=0;
char c;
FILE *plainfptr,*cipherfptr;
if((plainfptr=fopen("21.txt","r"))==NULL||
(cipherfptr=fopen("22.txt","w"))==NULL)
printf("ERROR!");
else{
while((c=fgetc(plainfptr))!=EOF){
c=(c-'a'+key[counter%n])%26+'A';
counter++;
fputc(c,cipherfptr);
}
}
fclose(plainfptr);
fclose(cipherfptr);
printf("加密完成!\n");
}
void decrypt(int *key,int n){
int counter=0;
char c;
FILE *plainfptr,*cipherfptr;
if((cipherfptr=fopen("22.txt","r"))==NULL||
(plainfptr=fopen("23.txt","w"))==NULL)
printf("ERROR!");
else{
while((c=fgetc(cipherfptr))!=EOF){
c=(c-'A'+26-key[counter%n])%26+'a';
counter++;
fputc(c,plainfptr);
}
}
fclose(plainfptr);
fclose(cipherfptr);
printf("解密完成!\n");
}
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("21.txt","r");
tag=1;
break;
case 2:
fptr=fopen("22.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);
}
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++){
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 + -