#include<stdio.h>
#include<string.h>
int main()
{
char a1[1000
];
char a2[1000];
char a3[1000];
char a4[1000];
char b[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
int i,h,x,count=0 ,m,m1,t;
int l,l2,lk,lk2,l3,l4;
int p=0,j=0,n=0,p2=0,n1=0,j1=0,c=0,count1=0,count2=0;
int r;
printf("******************************\n");
printf("维吉尼亚密码加密解密\n");
printf("******************************\n");
while(1)
{
printf(" 1:加密\n 2:解密\n 3.结束\n");
h=scanf("%d",&x);
if(h==1&&x==1)
{ fflush(stdin);
printf("请输入字母文本:\n");
while(1)
{
while(1)
{
fgets(a1, 1005, stdin);
l3=strlen(a1);
if(l3>1001)
count1++;
else
{ break;}
if(count1>0)
printf("输入超过范围请重新输入!\n");
fflush(stdin);
}
l=l3-1;
for(i=0;i<l;i++)
{
if((a1[i]>='a'&&a1[i]<='z')||(a1[i]>='A'&&a1[i]<='Z'))
{
}
else
{ count++;
}
}
if(count>0)
{ printf("输入错误!请重新输入!\n");
count=0;
}
else
{
break;
}
fflush(stdin);
}
for(i=0;i<l;i++)
{
if(a1[j]>='A'&&a1[j]<='Z')
{
a1[i]=a1[j];
}
else if(a1[j]>='a'&&a1[j]<='z')
{
a1[i]=a1[j]-32;
}
j++;
}
printf("请输入密钥(字母):\n");
while(1)
{
gets(a2);
lk=strlen(a2);
for(i=0;i<lk;i++)
{
if(((a2[i]>='a'&&a2[i]<='z')||(a2[i]>='A'&&a2[i]<='Z'))&&(lk<=1000))
{
}
else
{ p++;}
}
if(p>0)
{ printf("输入错误或超过输入范围!请重新输入!\n");
p=0;
}
else
{
break;
}
fflush(stdin);
}
for(m=0;m<lk;m++)
{
if(a2[n]>='A'&&a2[n]<='Z')
{
a2[m]=a2[n];
}
else if(a2[n]>='a'&&a2[n]<='z')
{
a2[m]=a2[n]-32;
}
n++;
}
for(i=0;i<l;i++)
{
printf("%c",b[(a1[i]+a2[i%lk]-65)%65]);
}
printf("\n");
fflush(stdin);
}
else if(h==1&&x==2)
{ fflush(stdin);
printf("请输入字母文本:\n");
while(1)
{
while(1)
{
fgets(a4, 1005, stdin);
l4=strlen(a4);
if(l4>1001)
count2++;
else
{ break;}
if(count2>0)
printf("输入超过范围请重新输入!\n");
fflush(stdin);
}
l2=l4-1;
for(i=0;i<l2;i++)
{
if(((a4[i]>='a'&&a4[i]<='z')||(a4[i]>='A'&&a4[i]<='Z'))&&(l2<=1000))
{
}
else
{ c++;
}
}
if(c>0)
{ printf("输入错误或超过输入范围!请重新输入!\n");
c=0;
}
else
{
break;
}
fflush(stdin);
}
for(i=0;i<l2;i++)
{
if(a4[j1]>='A'&&a4[j1]<='Z')
{
a4[i]=a4[j1];
}
else if(a4[j1]>='a'&&a4[j1]<='z')
{
a4[i]=a4[j1]-32;
}
j1++;
}
printf("请输入密钥(字母):\n");
while(1)
{
gets(a3);
lk2=strlen(a3);
for(i=0;i<lk2;i++)
{
if(((a3[i]>='a'&&a3[i]<='z')||(a3[i]>='A'&&a3[i]<='Z'))&&(lk2<=1000))
{
}
else
{ p2++;}
}
if(p2>0)
{ printf("输入错误或超过输入范围!请重新输入!\n");
p2=0;
}
else
{
break;
}
fflush(stdin);
}
for(m1=0;m1<lk2;m1++)
{
if(a3[n1]>='A'&&a3[n1]<='Z')
{
a3[m1]=a3[n1];
}
else if(a3[n1]>='a'&&a3[n1]<='z')
{
a3[m1]=a3[n1]-32;
}
n1++;
}
for(i=0;i<l2;i++)
{
t=(a4[i]-a3[i%lk2])%26;
while(t<0)t+=26;
printf("%c",b[t]);
fflush(stdin);
}
printf("\n");
fflush(stdin);
}
else if (h==1&&x==3)
return 0;
else
printf("没有这个选项,请重新输入!\n");
fflush(stdin);
}
}
古典密码之维吉尼亚密码
最新推荐文章于 2023-01-04 13:02:00 发布