我必须对纳粹德国用来加密通过无线电发送的信息的神秘算法进行编码,你可以读到它是如何正确工作的这里。
到目前为止,我只是编码转子,我没有编码插头板或转子的初始位置,因为我似乎已经有问题了。
我就是这么写的:
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
谢谢你对我的照顾。
洛伦佐。
发布于 2019-06-11 16:31:17
首先,我不知道在哪里初始化变量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来执行解密。
https://stackoverflow.com/questions/56547518
复制相似问题