Base64 — это способ кодирования двоичного кода в формат строки 64 ASCII. Каждый символ Base64 представляет собой ровно 6 бит данных. Следовательно, 3 * 8 бит (uint8_t) данных могут быть представлены 4 * 6-битными цифрами base64 (3 * 8 == 4 * 6). Кодировка Base64 обычно используется при передаче двоичных данных между сетями, таких как изображения, видео и т. д. Передача двоичных данных в base64 может помочь предотвратить неправильное истолкование некоторых необработанных двоичных данных как управляющего символа, или комбинация символов может быть такой же, как какая-либо функция. вызов. Ниже мы кратко рассмотрим, как кодировать base64 в C.

Сначала определите таблицу кодировки base64 char[] = «ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/» (рис. 1) и структуру типа, как на рис. 2.

ba-›msg — это сообщение, которое необходимо закодировать, а ba-›data — кодируемые данные base64. Используйте al.old, ba-›msg length, чтобы вычислить al.len, который представляет собой длину ba-›data. Поскольку в openssl каждые 64 цифры данных являются новой строкой, мы должны добавить 1 на каждые 64 цифры.

Каждые 3 uint8_t имеют длину 24 бита. Каждые 24 бита создаются путем сдвига первых 16 бит uint8_t влево + вторых 8 бит uint8_t влево + третьего uint8_t (также на рис. 4). Затем мы в основном помещаем каждые 6 бит в таблицу base64 и выделяем их для ba-›data. В openssl каждые 64 цифры будут иметь новую строку, поэтому мы используем оператор if, чтобы добавить новую строку в цикл.

Не все данные можно разделить на 3. Поэтому мы будем делать отступы в конце с добавлением ‘=’. Если модуль 3 равен 2, мы добавим два «=». И если модуль 3 только один, мы добавим только один «=».