Расшифровать Кодировки вида BaseN используются давно.
Они были придуманы для перевода произвольной двоичной последовательности (последовательности байт) в текстовый формат для передачи этого текста по сети (например, для протокола электронной почты).
(N) в названии означает длину алфавита, в который кодируется текст. Алфавит всегда выбирается так, чтобы в нем содержались только печатаемые символы.
Вот, например, алгоритм Base32:
Возьмем алфавит как 234567. Всего 32 символа.
Поделим нашу битовую последовательность на блоки по 40 бит (5 байт). Если длина последовательности не кратна 40, то дополняем последний блок нулями и, в зависимости от количества недостающих целых байт, выполняем в самом конце такой алгоритм:
Если не хватило 1 байта, то в итоговом тексте заменим один последний символ на =
Если не хватило 2 байт, то в итоговом тексте заменим три последних символа на =
Если не хватило 3 байт, то в итоговом тексте заменим четыре последних символа на =
Если не хватило 4 байт, то в итоговом тексте заменим шесть последних символов на =
В каждом блоке выделяем по 5 бит и переводим их в десятичную систему счисления (получится число от 0 до 31). Это число будет позицией символа алфавита, который нужно добавить к итоговой строке. Не забываем, что тру программисты считают с нуля.
После выполнения пункта 3 получаем итоговую строку - это и есть наша входная последовательность, закодированная алгоритмом BASE32.
Любой текст можно преобразовать в битовую последовательность (например, при таблицы ASCII) и применить к нему алгоритм Base32. Например, строка 'A' кодируется в 'IE', а 'ABC' в 'IFBEG==='.
Задание
Мы закодировали флаг при алгоритма BASE32, но наш алфавит состоит из нашего русского алфавита, за исключением буквы Ё - . Получилось 'ОНФЗАШЫФМЩЭЦДРЛУЖМЩУДЯИ='. Ты знаешь что нужно делать - достать флаг.