Попытка написать алгоритм шифрования - PullRequest
1 голос
/ 27 мая 2020

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

Пользователь запустит

./encryption.c KEY

, где KEY - это строка букв, которая содержит каждую букву алфавита только один раз. Например,

./encryption.c bcdefghijklmnopqrstuvwxyza

Затем он запросит у пользователя сообщение, которое они хотят зашифровать с помощью этого КЛЮЧА. Например, Hello World. Затем шифрование будет следовать алгоритму стиля подстановки.

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

Это выглядит так: (где открытый текст - это сообщение, шифротекст - это зашифрованный текст, а Alphabet - это массив букв алфавита):

#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>

const char Alphabet[26] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}; // A collection of letters to teach the computer the alphabet.
string plaintext = get_string("plaintext: ");
char ciphertext[strlen(plaintext) + 1];
ciphertext[strlen(plaintext) + 1] = '\0';
for (int j = 0; j < strlen(plaintext); j ++) // Handling the first/next letter of plaintext.
{
    char letter = plaintext[j];
    bool needCapital = isupper(letter);
    char cipherletter;
    for (int k = 0; k < strlen(ciphertext); k ++) // Finding the position of said letter.
    {
        char compe = Alphabet[k];
        if (needCapital == true)
        {
            compe = toupper(Alphabet[k]);
        }
        if (compe == letter)
        {
            cipherletter = key[k]; // Encryption.
            ciphertext[j] = cipherletter;
            printf("%s\n", ciphertext);
            break;
        }
        else if (isalpha(compe) == false)// This path is used for keeping punctuation the same.
        {
            cipherletter = letter;
            ciphertext[j] = cipherletter;
            printf("%s\n", ciphertext);
        }
    }
}
printf("ciphertext: %s\n", ciphertext); // End---

(Извинения за длинная длина кода) int main(void) будет go вокруг всего этого.

Однако, хотя мой код компилируется правильно, программа, похоже, где-то запуталась, поскольку она вообще не шифрует сообщение правильно .. Может ли кто-нибудь попробовать запустить это и сказать мне, где я ошибся? Надеюсь, мне удалось объяснить это правильно, но не стесняйтесь просить меня объяснить что-нибудь еще.

...