四种加密解密算法的源代码:移位密码、仿射密码、维吉尼亚密码以及置换密码 #include #include #include #include void Shift() /*移位密码*/ { char c[100]; int length, i=0, key=0; clrscr(); printf("********Shift Cipher********\nPlease input primal sentence: "); gets(c); length = strlen(c); printf("Input the key(0~ 26): "); scanf("%d", &key); getchar(); if(key<0) { printf("The value of key is error!\nPress any key to return..."); getch(); return; } for(i=0; i96&&c[i]<123) c[i] = (c[i]+key-97)%26+65; else if(c[i]>64&&c[i]<91) c[i] = (c[i]+key-65)%26+65; } printf("Result is: %s\n", c); for(i=0; i64&&c[i]<91) c[i] = (c[i]-key-65+26)%26+97; } printf("\nAfter translated the sentence,we can see the primal sentence as follow:\n%s\n", c); printf("Press any key to return..."); getch(); } int gcd(int a, int b) /*辗转相除法求a,b 的最大公因数*/ { int k = 0; do { k = a%b; a = b; b = k; }while(k!=0); return a; } int Ni(int a, int b) /*求a 相对于 b 的逆*/ { int i = 0; while(a*(++i)%b!=1); return i; } void Affine() /*仿射密码*/ { char c[100]; int length, i=0, ka=0, kb=0, tmp; clrscr(); printf("********Affine Cipher********\nPlease input primal sentence: "); gets(c); length = strlen(c); printf("Input the key(2 numbers): "); scanf("%d%d", &ka, &kb); getchar(); if(gcd(ka,26)!=1) { printf("The value of the key is error!\nPress any key to return..."); return; } for(i=0; i96&&c[i]<123) c[i] = (ka*(c[i]-97)+kb)%26+65; else if(c[i]>64&&c[i]<91) c[i] = (ka*(c[i]-65)+kb)%26+65; } printf("Result is: %s\n", c); for(i=0; i64&&c[i]<91) { tmp = Ni(ka,26)*((c[i]-65)-kb); if(tmp<0) c[i] = tmp%26+26+97; else c[i] = tmp%26+97; } } printf("\nAfter...