我必须解密一条消息(此刻只做一个单词),然后将其转回正确的单词。我有一个加密密钥(一个包含26个字母的字符串,其中第一个字母是A变成的字母,第二个字母是B变成的字母,依此类推),我需要使用它来返回原始单词。出于某种原因,我的代码没有错误,但不会解码,不久后服务器将其杀死。不知道为什么它不能正确执行解密功能。有人可以看到我的代码有问题吗?
我已经在Eclipse Che和Codeboard上尝试了代码(我是一个新的大学学生,还不是专业人士),它在任何地方都无法使用。我有一段工作的代码,它以基本上相同的方式对消息进行加密,但是解密代码(本质上是相同的东西,但是倒退)根本行不通。
在我的代码中,短语字符串是应该解密的单词,字母是字母(很明显),encryptionKey是代表字母每个字母变成什么的字符串。
char subdecrypt(char *phrase, char *encryptionKey);
char alphabetdecrypt(char *phrase, char x, char *encryptionKey);
int main()
{
char phrase[206]="NCPPQ NQYRBMY";
char alphabet[200]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char encryptionKey[200]="QAZXSWEDCVFRTGBNHYUJMKILOP";
printf("The decryption is:\n");
subdecrypt(phrase, encryptionKey);
return 0;
}
char subdecrypt(char *phrase, char *encryptionKey)
{
char i=0, x=0;
char alphabet[200]="ABCDEFGHIJKLMNOPQRSTUVWXYZ ";
while(phrase[i] != 0)
{
while(phrase[i] != encryptionKey[x])
{
x++;
}
alphabetdecrypt(phrase, x, encryptionKey);
i++;
}
}
char alphabetdecrypt(char *phrase, char x, char *encryptionKey)
{
char alphabet[200]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
encryptionKey[x]=alphabet[x];
printf("%c", alphabet[x]);
}
对此进行硬编码的短语应解密为PIZZA。但是输出当前什么都没有,并且代码最终被杀死。
答案 0 :(得分:1)
在while
的外部subdecrypt
循环中,您需要重置x = 0
,然后才能开始检查短语字符是否在加密密钥中。如果没有它,您将快速访问alphabet
的结尾。
答案 1 :(得分:1)
加密的字符串有一个' '
,但它不存在于加密密钥中,因此您的代码陷入了while(phrase[i] != encryptionKey[x])
循环中,寻找相应的密钥。
除此之外,还有两个问题。首先是外部while循环while(phrase[i] != '\0')
中的条件,其次是x
的重置。
更正的版本:
#include <stdio.h>
char subdecrypt(char *phrase, char *encryptionKey);
char alphabetdecrypt(char *phrase, char x, char *encryptionKey);
int main()
{
char phrase[206]="NCPPQ NQYRBMY";
phrase[13] = '\0';
char encryptionKey[200]="QAZXSWEDCVFRTGBNHYUJMKILOP ";
printf("The decryption is:\n");
subdecrypt(phrase, encryptionKey);
return 0;
}
char subdecrypt(char *phrase, char *encryptionKey)
{
char i=0, x=0;
while(phrase[i] != '\0')
{
x = 0;
while(phrase[i] != encryptionKey[x])
{
x++;
}
alphabetdecrypt(phrase, x, encryptionKey);
i++;
}
}
char alphabetdecrypt(char *phrase, char x, char *encryptionKey)
{
char alphabet[200]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
printf("%c", alphabet[x]);
}