C 编码谜算法,可以加密但不能解密

C 编码谜算法,可以加密但不能解密,c,cryptography,C,Cryptography,我必须对纳粹德国用来加密通过无线电发送的信息的enigma算法进行编码,你可以了解它的工作原理 到目前为止,我只是对转子进行编码,我还没有对插板或转子初始位置进行编码,因为我似乎已经有了问题 这是我写的: for (int i=0; i<strlen(sentence);i++){ sentence[i]=toupper(sentence[i]); temp=rs1[0]; for(int s=0;s<26-1;s++)

我必须对纳粹德国用来加密通过无线电发送的信息的enigma算法进行编码,你可以了解它的工作原理

到目前为止,我只是对转子进行编码,我还没有对插板或转子初始位置进行编码,因为我似乎已经有了问题

这是我写的:

    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);

    }
当我编译和执行我的代码时,我设法加密我输入的字,但当我重置程序并插入加密字时,它不会解密,这似乎很奇怪

例如: 如果我输入Hello,我得到QOBAJ,但在我重新启动程序并输入QOBAJ时,我得到的是MWCJC而不是Hello,我不知道为什么

我使用的转子是:

1-EKMFLGDQVZNTOWYHXUSPAIBRCJ

2-Ajdksiruxblhwtmcqznpyfvoe

3-BDFHJLCPRTXVZNYEIWGAKMUSQO

谢谢你帮助我


Lorenzo.

首先,我看不出在哪里初始化变量
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;
}
与:

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
}
char解密(char c,char r[])
{
用于(int num=0;num<26;++num)
{
如果(r[num]==c)
{
返回((字符)(65+num));
}
}
return(c);//不应该到这里
}

然后,要执行解密,请调用
decrypt
而不是
encrypt

我的道歉,我更正了该部分,q在以前版本的代码中用于调试,我忘了删除它。所有变量都在主程序开始时初始化。如果你想看更多,我把代码上传到我的
sentence[i]=encrypt(sentence[i],reflector);
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
}