Взлом шифра Цезаря
Шифр Цезаря - это древний алгоритм шифрования, использовавшийся Юлием Цезарем. Он шифрует буквы, сдвигая их на определенное число мест в алфавите. Длину сдвига мы называем ключом. Например, если ключ равен 3, то A становится D, B - E, C - F и так далее.
В данной статье мы реализуем алгоритм, который позволяет взламывать сообщения, зашифрованные шифром Цезаря. Для шифра Цезаря существует всего 26 возможных ключей, поэтому алгоритм может легко перебрать все возможные варианты расшифровки.
К сожалению, алгоритм не достаточно умен для того, чтобы определить, какой ключ был исходным. Пользователь вынужден сам проанализировать выходные данные и определить, какая расшифровка привела к оригинальному тексту. Попробуем решить эту проблему с помощью синтаксического анализа в следующих разборах.
Реализация
private void processCeasarHacker(string input) { for (int i = 1; i <= SYMBOLS.Length; i++) { var decrypted = new StringBuilder(); foreach (char sym in input) { if (SYMBOLS.Contains(sym)) { int num = SYMBOLS.IndexOf(sym) - i; if (num < 0) num += SYMBOLS.Length; decrypted.Append(SYMBOLS[num]); } else { decrypted.Append(sym); } } Console.WriteLine(string.Format("Key {0}: {1}", i, decrypted)); } }
https://github.com/unilecs/ugames/blob/main/games/CeasarHacker.cs