【发布时间】:2019-06-11 15:52:25
【问题描述】:
我必须编写纳粹德国使用的谜算法来加密通过无线电发送的消息,您可以阅读它的工作原理here
目前我只对转子进行编码,我还没有对插件板或转子初始位置进行编码,因为我似乎已经遇到了问题。
这是我写的:
for (int i=0; i<strlen(sentence);i++){
sentence[i]=toupper(sentence[i]);
temp=rs1[0];
for(int s=0;s<26-1;s++)
{
rs1[s]=rs1[s+1];
}
rs1[26-1]=temp;
j++;
if (j==26){
j=0;
temp=rs2[0];
for(int s=0;s<26-1;s++)
{
rs2[s]=rs2[s+1];
}
rs2[26-1]=temp;
z++;
}
if (z==26){
z=0;
temp=rs2[0];
for(int s=0;s<26-1;s++)
{
rs2[s]=rs2[s+1];
}
rs2[26-1]=temp;
}
q=(sentence[i]-65);
//this cant decrypt
sentence[i]=encrypt(sentence[i],rs1);
//printf("%s\n",sentence);
sentence[i]=encrypt(sentence[i],rs2);
//printf("%s\n",sentence);
sentence[i]=encrypt(sentence[i],rs3);
//printf("%s\n",sentence);
sentence[i]=reflect(sentence[i]);
//printf("%s\n",sentence);
sentence[i]=encrypt(sentence[i],rs3);
//printf("%s\n",sentence);
sentence[i]=encrypt(sentence[i],rs2);
//printf("%s\n",sentence);
sentence[i]=encrypt(sentence[i],rs1);
//printf("%s\n",sentence);
}
功能是:
char encrypt(char c, char r[]){
int num=(int)c-65;
char newc;
newc=r[num];
return newc;
}
char relfect(char c){
char reflector[27]={'A','Q','W','S','E','D','R','F','T','G','Y','H','U','J','O','K','I','L','P','Z','V','C','X','B','N','M'};
int num=(int)c-65;
char newc;
newc=reflector[num];
return newc;
}
当我编译和执行我的代码时,我设法加密了我输入的单词,但是当我重置程序并插入加密的单词时,它并没有解密它,这看起来很奇怪。
示例: 如果我输入 Hello 我得到 QOBAJ 但在我重新启动程序并输入 QOBAJ 我得到 MWCJC 而不是 Hello 我不知道为什么。
我使用的转子是:
1- EKMFLGDQVZNTOWYHXUSPAIBRCJ
2- AJDKSIRUXBLHWTMCQGZNPYFVOE
3- BDFHJLCPRTXVZNYEIWGAKMUSQO
谢谢你帮助我。
洛伦佐。
【问题讨论】:
标签: c cryptography