求简单的解密啊!小弟是初学者,求帮助
evdzcvi这几个字母是用以下方法加密码所得到的:英文字母从A—Z分别对应0—25,先将明文转化为对应的数字,
C(密文)=k*对应的数字(mod26)
再将C转化成对应的字母就得到evdzcvi!
现在要解出明文与密钥K!
希望高手们帮帮小弟!教一下我解密的方法与程序,程序最好有解释!!谢谢!
#include <stdio.h> int main(void) { char Encryption[] = "evdzcvi"; char Decryption[8]; int temp[7]; int i = 0, j, k, n, found = 0; while(Encryption[i]) { temp[i] = Encryption[i] - 'a'; i++; } for(k = 2; ; k++) { n = 0; for(i = 0; i < 7; i++) { for(j = 0; j < 26; j++) { if(temp[i] == k * j % 26) { Decryption[i] = j + 'a'; n++; break; } } } if(n == 7) { found = 1; Decryption[8] = '\0'; break; } } if(found) { printf("%s\n", Decryption); printf("k : %d\n", k); } return 0; }
#include<stdio.h> void decrypt(char m[],char c[],int k,int length) { int i,mm,nn; for(i=0;i<length;i++) { /* 第一步:将字母转换为Z26中的元素 */ if((c[i]>='A')&&(c[i]<='Z')) { mm=c[i]-'A'; /* 第二步:加密 */ nn = (mm/k)%26; /* 第三步:将密文转换为字母 */ m[i] = 'a'+nn; } else if((c[i]>='a')&&(c[i]<='z')) { mm=c[i]-'a'; /* 第二步:加密 */ nn = (mm/k)%26; /* 第三步:将密文转换为字母 */ m[i] = 'a'+nn; } else m[i]=c[i]; } return; } void main() { char m[100]; char c[100]="evdzcvi"; int k,j,i,length; length=7; for(j=0;j<26;j++) { decrypt(m,c,j,length); printf("密钥为%d:明文为:",j); for(i=0;i<length;i++) printf("%c",m[i]); printf("\n"); } return; }