base64

Up base64 uucode

Процедура кодирования сообщений Base64

Процедура предназначена для преобразования двоичных файлов перед передачей их через службы, поддерживающие только 7-битовую ASCII-кодировку (SMTP, NNTP и др.). Сущность преобразования сводится к замене серий двоичных знаков на серии ASCII- символов. Каждая последовательность из трех байт (24 бит) сообщения преобразуется в четыре шестибитовых значения (рис.1). Затем каждому шестибитовому значению ставится в соответствие символ ASCII согласно числу, представленному шестью битами. Количество символов ASCII ограничено 64. Пример соответствия кодов Base64 и ASCII приведен ниже. Если количество символов (байтов) не кратно трем, то используется дополнительный символ “=”.

Слово: C O P E
Шестнадцатиричное: 0x43 0x4F 0x50 0x45
Двоичное: 01000011 01001111 01010000 01000101

 

6-битовое: 010000 110100 111101 010000 010001 010000
Десятичное: 16 52 61 16 17 16
Base64: Q 0 9 Q R Q

 

Рис 1.

 

Алгоритм декодирования процедуры Base 64

Последовательность символов, закодированных методом Base 64, разделяется на группы по 4 символа. Затем каждому символу в соответствии с таблицей кодировки Base64 ставится в соответствие десятичное значение порядкового номера. Каждое десятичное значение представляется в шестибитовом виде, и далее формируется последовательность длиной 24 бита (6*4). Полученная последовательность разбивается на три группы по 8 бит, при приведении которых к символьному виду получаются 3 символа ASCII. Пример реализации алгоритма показан на рисунке 1.

Шесть бит первого символа Base64 являются старшими шестью битами первого байта данных. Их необходимо переместить с позиций 1-6 на позиции 3-8. Для этого выполняется операция сдвига влево на две позиции. Затем выделяются биты с позиций 5-6 из второго символа и комбинируются выделенные 6 старших и 2 младших бита. В результате получается 1-й байт данных.

Для получения 2-го байта данных, выполняются те же операции, только вместо сдвига влево на два и сдвига вправо на четыре бита выполняется сдвиг влево на четыре и вправо на два бита.

Для получения 3-го байта данных берутся 5-6 биты 3-го символа Base64, которые соответствуют первым двум старшим битам данных, и 4-й символ. Результатом сложения является третий байт.