Нужна помощь с грубой силой Цезаря Шифра

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

Вот мой код до сих пор:

#include <iostream>

using namespace std;

int main()
{
char message[100], ch;
int i;

cout << "Enter a message to decrypt: ";
cin.getline(message, 100);

for(int key = 0; key<26 ; key++)
{
for(i = 0; message[i] != '\0'; ++i){
ch = message[i];

if(ch >= 'a' && ch <= 'z'){
ch = ch - key;

if(ch < 'a'){
ch = ch + 'z' - 'a' + 1;
}

message[i] = ch;
}
else if(ch >= 'A' && ch <= 'Z'){
ch = ch - key;

if(ch > 'a'){
ch = ch + 'Z' - 'A' + 1;
}

message[i] = ch;
}
}
cout << "Decrypted message: " << message << " " << endl ;
}

return 0;
}

У меня проблема в том, что когда он показывает догадки, он пропускает буквы, когда они строчные, и просто застревает, когда они заглавные, и повторяет одну и ту же строку. В этом примере это код LT HDGJWJFLQJX, который должен расшифровываться как GO CYBEREAGLES. Выводы программы в верхнем и нижнем регистре показаны на прилагаемых изображениях.

Изображение 1

Изображение 2

-1

Решение

Вы расшифровываете message на месте, поэтому, когда вы делаете второе предположение, вы дешифруете результат первого дешифрования. Третье предположение работает с результатом второго дешифрования и т. Д.

Когда вы записываете расшифрованное предположение, оно должно перейти в другой массив, чем message, так что следующая итерация может начаться с исходных данных шифрования.

Редактировать: создать другой массив, char decrypted[100];, то напиши в него расшифрованные символы (decrypted[i] = ch;). Не забывайте нулевой (нулевой) символ в конце.

-1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector