Я пытаюсь создать алгоритм, который зашифровывает одно сообщение в другое, используя метод подстановки.
Пользователь запустит
./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 вокруг всего этого.
Однако, хотя мой код компилируется правильно, программа, похоже, где-то запуталась, поскольку она вообще не шифрует сообщение правильно .. Может ли кто-нибудь попробовать запустить это и сказать мне, где я ошибся? Надеюсь, мне удалось объяснить это правильно, но не стесняйтесь просить меня объяснить что-нибудь еще.