我必须解密一条消息(此刻只做单个单词)并将其转回正确的单词。我有一个加密密钥(一个26个字母的字符串,其中第一个字母是A变成A,第二个字母是B变成了等等),我需要用它来回到原始单词。由于某种原因,我的代码没有错误,但不会解码,过了一段时间它只是被服务器杀死了。不知道为什么它不能正确执行解密功能。有人可以看到我的代码有问题我不能吗?
我已经尝试过Eclipse Che上的代码以及代码板(我是一名新的大学生,而不是专业人士),它无法在任何地方使用。我有一段代码以基本相同的方式对消息进行加密,但是解密代码(基本上是相同但反向的)根本不起作用。
在我的代码中,短语string是应解密的单词,字母表是字母表(有点明显),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中。但输出目前没什么,代码最终被杀死了。
在while
的外部subdecrypt
循环内,您需要在开始检查加密密钥中的短语字符之前重置x = 0
。没有它,你将很快访问alphabet
的末尾。
加密的字符串有一个' '
但它不在加密密钥中,因此你的代码卡在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]);
}