Требуется написать конвертор в формат base64 и из
формата base64.
Кодирование в формат base64 происходит следующим
образом:
1. Если длина исходного текста в байтах не делится на
3, то он дополняется минимальным количеством нулевых байтов так, чтобы длина
делилась на 3, количество добавленных байтов запоминается.
2. Текст разбивается на группы по 3 байта. Каждая
группа кодируется отдельно.
3. Из трёх байтов получается 24-битное число. Первый
байт тройки является старшим, третий — младшим.
4. 24-битное число разбивается на четыре 6-битные
группы. Старшие 6 бит определяют первый символ кодирующей четвёрки, младшие 6
бит — последний и т.п.
5. Шестёрки битов кодируются символами следующего набора:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
Номер 0 кодируется буквой 'A', номер 1 буквой 'B',
номер 63 символом '/'.
6. Полученные четвёрки символов записываются друг за
другом в том же порядке, в каком шли тройки, из которых они были получены.
7. Вспоминается, сколько нулевых символов было
добавлено в конец исходного текста на шаге 1, и столько последних символов
закодированного текста меняются на '='.
8. Текст разбивается на группы по 76 символов (в
последней может быть меньше) и каждая такая группа записывается в отдельной
строчке. Каждая непустая строка должна заканчиваться переводом строки (символы
13 10).
В первой строке входного файла содержится
тип информации во входном файле, вторая строка пустая, далее следует
информация, которую нужно закодировать или раскодировать.
Если требуется закодировать текст, то файл начинается
символами
'Content-Transfer-Encoding:
8bit', за которыми следует 4 символа 13
10 13 10 — и весь остаток файла — набор байтов, подлежащий кодированию. Объём
кодируемого текста ("текст" может быть двоичными данными) не
превышает 100 000 байт.
Если требуется декодировать текст, то файл начинается
символами
'Content-Transfer-Encoding:
base64', за которыми следует 4 символа 13
10 13 10 — и весь остаток файла — текст, закодированный base64. Кодированный
текст получен из исходного, не превышающего 100 000 байт.
Выведите в выходной файл строку с
противоположным типом информации, затем пустую строку, затем результат
кодирования или декодирования.
Если требовалось закодировать текст, то выходные
данные должны начинаться символами 'Content-Transfer-Encoding: base64', за которыми должны следовать 4 символа 13 10 13 10
— и далее до конца файла должен содержаться текст, закодированный base64.
Если требовалось раскодировать текст, то выходные
данные должны начинаться символами 'Content-Transfer-Encoding: 8bit', за которыми должны следовать 4 символа 13 10 13 10
— и далее до конца файла должен содержаться раскодированный текст.
Пример
Входные данные
|
Выходные данные
|
Content-Transfer-Encoding:
8bit
Vologda SPU
|
Content-Transfer-Encoding:
base64
Vm9sb2dkYSBTUFU=
|