2.2.4. Реализации метода Base-64.

Далее рассмотрен процесс кодирования слова KEN методом Base-64. Описания участвующих в процессе переменных:

BYTE cTemp, cTempHigh, cTempLow;

BYTE cFirst6Bits, cSecond6Bits;

BYTE cThird6Bits, cFourth6Bits;

BYTE cFirstLetter = ‘K’;

BYTE cSecondLetter = ‘E’;

BYTE cThirdLetter = ‘N’;

Кодирование данных по методу Base-64

Операторы языка C/C++, реализующие способ кодирования Base-64:

cFirst5Bits = cFirthLetter >> 2; (1)

cTemp = cFirstLetter << 4; (2A)

cTempHigh = cTemp & 0x30; (2B)

cTempLow = cSecondLetter >> 4; (2C)

cSecond6Bits = cTempHigh | cTempL w; (2D)

cTemp = cSecondLetter << 2; (3A)

cTempHigh = cTemp & 0x3C; (3B)

cTempLow = cThirdLetter >> 6; (3C)

cThird6Bits = cTempHigh | c TempLow; (3D)

cFourth6Bits = cThirdLetter & 0x3F; (4)

Первым делом биты переменной сFirstLetter (символа K) сдвигаются вправо на две позиции. Получается новый байт, содержащий первые шесть бит нашей последовательности. Далее полученное значение записывается в переменную cFirst6Bits. Дальше, чтобы получить следующее значение, нужно объединить два младших бита первого символа (K) с четырьмя старшими второго (E), т.е. нужно переместить первый и второй биты буквы K на позиции 5 и 6 – они будут старшими битами следующего шестибитного символа. Операция 2А, двоичный сдвиг влево на четыре позиции демонстрирует, как это делается. Результат сдвига запоминается во вспомогательной переменной cTemp.

Сдвиг оператором 2А очищает позиции с 1 по 4, а биты 3 и 4 буквы K теперь расположены на позициях 7 и 8. Позиции 7 и 8 необходимо очистить, поскольку нам нужны только первые шесть битов нового символа. Для этого выполняется оператор 2В, “двоичное И”. Битовая маска 00110000 (0х30) очищает все позиции, кроме пятой и шестой (в них содержатся интересующие нас данные). Поскольку биты 5 и 6 теперь старшие для нового символа Base-64, результат помещается (оператором 2В) во вспомогательную переменную cTempHigh.

В результате оператора 2В имеется два старших бита нового шестибитного символа. Биты с 1 по 4 должны быть взяты из второго символа. Чтобы получить четыре бита из второго символа, его содержимое сдвигается вправо на четыре позиции (оператор 2С). Результат оператора 2 С помещается во вспомогательную переменную cTempLow. Теперь в переменной cTempLow хранятся четыре младших бита нового символа, а в переменной cTempHigh — два старших. Для того чтобы их скомбинировать, мы используем оператор (2D) двоичного ИЛИ. Результат операции заносится в переменную cSecond6Bits.

В третий шестибитный символ должны попасть четыре младших бита символа Е и два старших бита символа N. То есть нужно переместить четыре младших бита символа Е с позиций 1 - 4 на позиции 3 - 6. Для этого оператор 3А сдвигает биты влево на две позиции и помещает результат в переменную сТеmр. Сдвиг влево очищает позиции 1 и 2 для следующих данных. Кроме того, необходимо убедиться, что позиции 7 и 8 тоже свободны. Другими словами, нам нужны только биты в позициях 3 - 6. Чтобы очистить ненужные и оставить нужные позиции, выполняется оператор “двоичное И” с маской 00111100 (0х3С). Результат оператора 3В помещается в переменную cTempHigh.

Далее два старших бита символа N необходимо сдвинуть на позиции 1 и 2. Для этого выполняется оператор ЗС сдвига вправо на 6 позиций. Результат заносится в переменную cTempLow. Теперь у нас есть четыре младших бита символа Е в переменной cTempHigh и два старших бита символа N в переменной cTempLow. Оператор 3D комбинирует значения двух этих переменных при помощи двоичного сложения (ИЛИ) и помещает новое шестибитное значение в переменную cThird6Bits. Теперь получить четвертое шестибитное значение становится просто, т.к. все биты уже стоят на своих позициях с 1 по 6 в символе N. Осталось маскировать значения битов позиций 7 и 8. Оператор 4 выполняет “двоичное И” с маской 00111111 (Ox3F) и заносит результат в переменную cFourth6Bits.

Декодирование данных по методу Base-64

Операторы языка C/C++, реализующие способ декодирования Base-64:

cTempHigh = cFirst6Bits <<2; (5A)

cTempLow = cSecond6Bits >> 4; (5B)

cFirstLetter = cTempHigh | cTempLow; (5C)

cTempHigh = cSecond6Bits << 4; (6A)

cTempLow = cThird6Bits >> 2; (6B)

cSecondLetter = cTempHigh | cTempLow; (6C)

cTempHigh = cThird6Bits << 6; (7A)

cThirdLetter = cTempHigh | cFourth6Bits; (7B)

Значения полученных четырех шестибитных символов формата Base-64 хранятся в переменных cFirst6Bits, cSecond6Bits, cThird6Bits и cFourth6Bits. Операторы с 5А по 7В демонстрируют, как декодировать эти значения. Чтобы получить каждый байт (кроме третьего) в последовательности, производятся операции левого сдвига, правого сдвига и битового ИЛИ. (Для третьего символа правый сдвиг не нужен - требуются только левый сдвиг битовое ИЛИ.) Ключевой момент - знать, на сколько позиций сдвигать в каждом направлении. Шесть битов первого символа Base-64 являются старшими шестью битами первого байта данных. Их необходимо переместить с позиций 1 - 6 на позиции 3 - 8. Для этого выполняется операция сдвига влево на две позиции (оператор 5А). Поскольку эти биты старшие, результат заносится в переменную cTempHigh. Теперь требуются биты с позиций 5 и 6 из второго символа Base-64. В них занесены два младших бита первого байта данных. Сдвиг вправо на четыре позиции оператором 5В решает проблему. Результат оператора 5В заносится в переменную cTempLow. Теперь есть шесть старших битов в переменной cTempHigh и два младших бита в переменной cTempLow. Oператор 5С, битовое ИЛИ, комбинирует их значения, и в результате получается первый байт данных.

Чтобы получить второй байт данных, выполняются практически те же операторы. Только вместо сдвига влево на два и сдвига вправо на четыре делается сдвиг влево на четыре, а вправо на два, как продемонстрировано операторами 6А и 6В. Оператор 6С, битовое ИЛИ, комбинирует полученные результаты операторов 6А и 6В и получает значение второго байта данных. Биты с 1 по 6 четвертого символа Base-64 соответствуют младшим битам третьего символа данных. Биты 7 и 8 символа данных содержатся на позициях 1 и 2 третьего символа Base-64. Поэтому значение третьего символа сдвигается вправо на шесть позиций оператором 7А. Наконец, в результате оператора 7В, битовое ИЛИ, получается третий байт данных.

Реализация алгоритма

Метод кодирования Base-64 оперирует с 24-битными величинами. Алгоритмы кодирования и декодирования также оперируют 24-битными величинами. Другими словами, хотя в предыдущем разделе и не рассматривались прототипы функций для кодирования-декодирования Base-64, предполагалось, что у них 24-битные аргументы. Алгоритм кодирования состоит из десятка очень быстрых (поскольку все они работают с двоичной информацией) операторов, преобразующих три байта данных в четыре шестибитных символа Base-64 и восьми строк с такими же быстрыми операторами, преобразующими эти символы в три 8-битных символа исходных данных.


Информация о работе «Электронная почта как сервис глобальной сети. Протоколы передачи почты»
Раздел: Информатика, программирование
Количество знаков с пробелами: 106780
Количество таблиц: 9
Количество изображений: 3

Похожие работы

Скачать
50469
0
6

... . В настоящее время ATM предоставляется конечным пользователям только в виде постоянных виртуальных соединений. Однопротокольная среда ATM и в локальных, и в глобальных сетях упрощает управление. Благодаря тому, что межсетевым устройствам не нужно переводить один протокол в другой, задержка невелика и предсказуема. Если сравнивать frame relay и ATM, то последняя, как технология передачи ячеек, ...

Скачать
79237
0
0

... гипертекстовых связей между документами находящимися в различных архивах сети; благодаря этим связям можнонепосредственно во время просмотра одного документа переходить к другим документам. Internet - глобальная компьютерная сеть. internet - технология сетевого взаимодействия между компьютерами разных типов. IP (Internet Protocol) - протокол межсетевого взаимодействия, самый важный из ...

Скачать
591939
0
0

... 29-10 Упражнение 29 29-11 [КС xv] []Приложение А []Ссылки А-1 []Приложение В []Рисунки В-1 []Приложение С []Решения С-1 []Словарь []Сокращения []Индексы [КС xvi] [1]Технология создания сетей ЭВМ [1]Вопросы и ответы []Эта форма поможет вам получить ответ на любой вопрос, возникший в процессе изучения ...

Скачать
84781
2
0

... можете зарегистрировать на себя новый домен и в дальнейшем, при переезде из города в город сохранять за собой эти имена. Будет меняться только организации, которые осуществляют ваш выход в Интернет, регистрируя эти имена в глобальной сети. 6.2. IP адрес Второй параметр, который будет уникально определять ваш компьютер в мире – это IP адрес. IP адрес – это четыре числа, каждое из которых может ...

0 комментариев


Наверх