替换密码无法解码,代码被杀死

时间:2019-04-18 05:19:12

标签: c encryption substitution eclipse-che

我必须解密一条消息(此刻只做一个单词),然后将其转回正确的单词。我有一个加密密钥(一个包含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。但是输出当前什么都没有,并且代码最终被杀死。

2 个答案:

答案 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]);
}