base64
Требуется написать конвертор в формат 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 — и далее до конца файла должен содержаться раскодированный текст.