Подстановочный шифр не декодируется, код убит - PullRequest
0 голосов
/ 18 апреля 2019

Я должен расшифровать сообщение (просто делая отдельные слова в данный момент) и превратить его обратно в правильное слово. У меня есть ключ шифрования (строка из 26 букв, где первая буква - это то, во что превращается A, вторая - во что превращается B, и т. Д.), Который мне нужно использовать, чтобы вернуться к исходному слову. По какой-то причине в моем коде нет ошибок, но он не декодируется, и через некоторое время он просто уничтожается серверами. Не знаю, почему он не будет правильно выполнять функцию расшифровки. Может ли кто-нибудь увидеть проблему с моим кодом, которую я не могу?

Я пробовал код на Eclipse Che, а также кодовую доску (я еще не учился в университете), и он нигде не будет работать. У меня есть рабочий кусок кода, который шифрует сообщение в основном таким же образом, но код дешифрования (который по сути то же самое, но в обратном направлении) просто не будет работать.

В моем коде словосочетание - это слово, которое должно быть расшифровано, алфавит - это алфавит (вроде бы очевидный), а 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]);
}

Фраза, которая жестко закодирована с этим, должна быть расшифрована в ПИЦЦУ. Но вывод в настоящее время ничего, и код в конечном итоге убит.

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Зашифрованная строка имеет ' ', но ее нет в ключе шифрования, поэтому ваш код застревает в цикле 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]);
}
1 голос
/ 18 апреля 2019

Внутри внешнего цикла while в subdecrypt необходимо сбросить x = 0, прежде чем начинать проверять наличие символа фразы в ключе шифрования.Без него вы быстро доберетесь до конца alphabet.

...