古典密码之维吉尼亚密码

mac2026-05-19  6

#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); } }
最新回复(0)