替换密码不会解码,代码被杀死

问题描述 投票:0回答:2

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

c encryption substitution eclipse-che
2个回答
1
投票

while的外部subdecrypt循环内,您需要在开始检查加密密钥中的短语字符之前重置x = 0。没有它,你将很快访问alphabet的末尾。


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]);
}
© www.soinside.com 2019 - 2024. All rights reserved.