📄 vigenere.c
字号:
#include<stdio.h>
#include<string.h>
#include<ctype.h>
main()
{
char m[200],s[200],c[200];
int a,b,n,r;
int i,k;
char v[26][26];
for(i=0;i<26;i++)
for(k=0;k<26;k++)
v[i][k]=65+(k+i)%26; /*生成Vigener矩阵*/
printf("*****Vigener体制*****\n");
printf("请选择:若要加密,请输入1;若要解密,请输入0\n");
scanf("%d",&n);
if(n==1) /*加密部分*/
{
printf("*****用Vigenere体制加密*****\n");
printf("请输入明文:");
scanf("%s",m);
printf("请输入秘钥:");
scanf("%s",s);
a=strlen(m);
b=strlen(s);
for(i=0;i<a;i++)
{
if(m[i]>=65 && m[i]<=90)
m[i]=m[i]+32; /*将明文中的大写转化为小写*/
if(isupper(s[i]))
s[i]=s[i]+32; /*将密钥中的大写转化为小写*/
c[i]=v[m[i]-97][s[i%b]-97];
} /*加密*/
printf("密文为:");
printf("%s",c);
}
if(n==0) /*解密部分*/
{
printf("*****用Vigenere体制解密*****\n");
printf("请输入密文:\n");
scanf("%s",c);
printf("请输入密钥:\n");
scanf("%s",s);
a=strlen(c);
b=strlen(s);
for(i=0;i<a;i++)
{
if(c[i]>=97 && c[i]<=122)
c[i]=c[i]-32; /*将密文中的小写转化为大写*/
if(isupper(s[i])) /*将密钥中的大写转化为小写*/
s[i]=s[i]+32;
r=(c[i]-65)-(s[i%b]-97);
if(r<0)
r=26+r;
m[i]=v[0][r];
} /*解密*/
printf("明文为:");
printf("%s",m);
}
if(n!=1 && n!=0)
printf("输入错误!\n");
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -