求简单的解密啊!小弟是初学者,求帮助
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;
}