.
Кодирование Base64 в микроконтроллерах хоть и не так часто, но все-таки применяется. По этому и было принято решение написать данную статью в надежде что эта информация кому нибудь поможет в реализации задуманного.
Самому пришлось столкнуться с кодировкой Base64 когда появилась потребность в отправке от микроконтроллера электронных сообщений (почтовый клиент), где данная кодировка в основном и применяется.
Информации по Base64 в интернете предостаточно, а вот найти что то готового не получилось, по этому и решил написать подпрограмму кодирования и декодирования Base64 на ассемблере.
На самом деле при помощи base64 можно кодировать любые двоичные данные и не только в формате электронной почты (транспортное кодирование), а в том числе различные тексты и файлы. Часто используется в веб-приложениях, сокрытие паролей и др..
Для того что бы понять принцип кодирования Base64 рассмотрим рисунок:
Для кодирования данных в base64 берем первые три байта (буфер 24 бита), первый байт помещаем в самый старший регистр - BaseU, второй в BaseH и последний в BaseL. Если кодируется менее чем три байта, то соответствующие регистры (BaseH,L) необходимо установить в ноль.
Как видим из рисунка трех байтовое число ( 8 бит в байте) конвертируется в промежуточное четырех байтовое число (6 бит в байте) с последующим добавлением двух нолей в старшие регистры (выделено красным светом). Максимальное число которое может получиться при таком конвертировании 63, т.к старшие два бита всегда имею значение "0". Т.е. всего получается 64 знака, отсюда и название кодировки Base64.
Далее кодируем регистры Base_1-4 согласно таблице соответствия. Используются только символы латинского алфавита в верхнем и нижнем регистре, цифры (0-9) и символы «+» и «/» :
«ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/» .
Таблица соответствия в Base64
Результат сохраняется в регистрах Base_1-4.
Если кодируются только один или два байта, то в регистры Base_3-4 дополняются двумя или одним символами «=» (равно). К примеру: "Mx==" или "M8x=".
Максимальная длина строки в base64, состоящая из 4-х символьных стрингов составляет 72 символа (кроме последней строки ).
Что касается самой программы...
Таблицы соответствия кодирования и декодирования Base64 прошиты в EEPROM по адресам 0300h-034Fh и 0350h-038Fh. В случае применения микроконтроллера с меньшим объемом EEPROM необходимо изменить адресацию в программе.
Encod_base movlw 0x03 ; расположение base кода в EEPROM 0300h
movwf EEADRH ;
====================================
Decod_base movlw 0x03 ; расположение base кода в EEPROM 0300h
movwf EEADRH ;
Программа написана для PIC микроконтроллеров 18 серии.
Проект MPlab на примере МК pic18f46k20 Скачать
Задать вопрос на форуме...
Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2021 © ChipMK.ru
![]() |
|