Расшифровать Кодировки вида BaseN используются давно.

Они были придуманы для перевода произвольной двоичной последовательности (последовательности байт) в текстовый формат для передачи этого текста по сети (например, для протокола электронной почты).

(N) в названии означает длину алфавита, в который кодируется текст. Алфавит всегда выбирается так, чтобы в нем содержались только печатаемые символы.

Вот, например, алгоритм Base32:

Возьмем алфавит как 234567. Всего 32 символа.

Поделим нашу битовую последовательность на блоки по 40 бит (5 байт). Если длина последовательности не кратна 40, то дополняем последний блок нулями и, в зависимости от количества недостающих целых байт, выполняем в самом конце такой алгоритм:

Если не хватило 1 байта, то в итоговом тексте заменим один последний символ на =

Если не хватило 2 байт, то в итоговом тексте заменим три последних символа на =

Если не хватило 3 байт, то в итоговом тексте заменим четыре последних символа на =

Если не хватило 4 байт, то в итоговом тексте заменим шесть последних символов на =

В каждом блоке выделяем по 5 бит и переводим их в десятичную систему счисления (получится число от 0 до 31). Это число будет позицией символа алфавита, который нужно добавить к итоговой строке. Не забываем, что тру программисты считают с нуля.

После выполнения пункта 3 получаем итоговую строку - это и есть наша входная последовательность, закодированная алгоритмом BASE32.

Любой текст можно преобразовать в битовую последовательность (например, при таблицы ASCII) и применить к нему алгоритм Base32. Например, строка 'A' кодируется в 'IE', а 'ABC' в 'IFBEG==='.

Задание

Мы закодировали флаг при алгоритма BASE32, но наш алфавит состоит из нашего русского алфавита, за исключением буквы Ё - . Получилось 'ОНФЗАШЫФМЩЭЦДРЛУЖМЩУДЯИ='. Ты знаешь что нужно делать - достать флаг.

SuperSaam SuperSaam    2   31.10.2020 15:48    7

Другие вопросы по теме Информатика