C 编码谜算法,可以加密但不能解密
我必须对纳粹德国用来加密通过无线电发送的信息的enigma算法进行编码,你可以了解它的工作原理 到目前为止,我只是对转子进行编码,我还没有对插板或转子初始位置进行编码,因为我似乎已经有了问题 这是我写的: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++)
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
}