Взлом шифра Цезаря
Шифр Цезаря - это древний алгоритм шифрования, использовавшийся Юлием Цезарем. Он шифрует буквы, сдвигая их на определенное число мест в алфавите. Длину сдвига мы называем ключом. Например, если ключ равен 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