我必须对纳粹德国使用的加密算法进行编码,以加密通过无线电发送的消息,您可以正确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
谢谢您的帮助。
洛伦佐。
答案 0 :(得分:2)
首先,我看不到将变量j
或z
初始化的位置,并且在为变量q
赋值后再也没有使用它。假设您确实初始化了所有内容,则不需要变量q
,并且您的代码正确无误,那么问题出在这里:
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;
}
在此代码块中,您应该使用rs3
而不是rs2
。看起来您进行了复制和粘贴,但并没有更改所有名称。
编辑:
您必须反转用于解密的查找机制,并且不需要reflect
函数。替换
sentence[i]=reflect(sentence[i]);
具有:
sentence[i]=encrypt(sentence[i],reflector);
decrypt
函数将如下所示:
char decrypt(char c, char r[])
{
for ( int num = 0; num < 26; ++num )
{
if ( r[num] == c )
{
return((char)(65 + num));
}
}
return(c); // Should never get here
}
然后执行解密,请调用decrypt
而不是encrypt
。