b64.h - Man Page

Кодирование base64.

Synopsis

#include 'bee2/defs.h'
#include 'bee2/core/safe.h'

Функции

bool_t b64IsValid (const char *b64)
Корректная base64-строка?
void b64From (char *dest, const void *src, size_t count)
Кодирование буфера памяти
void b64To (void *dest, size_t *count, const char *src)
Декодирование буфера памяти

Подробное описание

Реализовано кодирование буферов памяти base64-строками по правилам RFC 4848. Base64-строка -- это слово в алфавите b64_alphabet = {'A',...,'F','a',...,'f','0',...,'9','+','/'}, которое может дополняться одним или двумя символами '=' и длина которого всегда кратна 4.

Правила кодирования: 1 Кодируемые данные разбиваются на блоки --- тройки октетов или 24-ки битов. Каждая 24-ка разбивается на четыре 6-ки. Каждая 6-ка кодируется 1 символом b64_alphabet: 000000 --- символом 'A',...., 111111 -- символом '/'. 2 Если последний блок данных является неполным, то он дополняется до полного 8 или 16 нулевыми битами, а затем кодируется 3 или 2 символами b64_alphabet. 3 Более точно, если блок дополняется 8 нулевыми битами, то кодируются первые 18 = 6 * 3 битов блока (16 значащих битов и 2 дописанных нуля). Если же блок дополняется 16 нулевыми битами, то кодируются первые 12 = 6 * 2 битов (8 значащих и 4 нуля). 4 Окончательное кодовое слово дополняется символами '=' до тех пор, пока его длина не станет кратной 4. Если последний блок данных полный, то символ '=' не дописывается. Если последний блок состоял из 2 октетов, то будет дописан 1 символ '=', если из 1 октета -- 2 символа.

Предусловие

Во все функции, кроме возможно b64IsValid(), передаются корректные строки и буферы памяти.

Функции

void b64From (char * dest, const void * src, size_t count)

Буфер [count]src кодируется base64-строкой [4 * ((count + 2) / 3) + 1]dest.

Предусловие

Буферы dest и src не пересекаются.

Аргументы

dest строка-приемник  
src память-источник  
count число октетов

bool_t b64IsValid (const char * b64)

Проверяется корректность base64-строки b64. Строка считается корректной, если:

  • ее длина кратна 4;
  • строка может заканчиваться 1 или 2 символами '=', все остальные символы принадлежат алфавиту enc_table;
  • если последний блок строки имеет вид abc=, то в 6-кe битов, соответствующих символу c, два младших бита нулевые;
  • если последний блок строки имеет вид ab==, то в 6-кe битов, соответствующих символу b, четыре младших бита нулевые.

Возвращает

Признак корректности.

Регулярность

Функция нерегулярна.

Аргументы

b64 base64-строка

void b64To (void * dest, size_t * count, const char * src)

Base64-строка src декодируется в строку октетов [count?]dest.

Предусловие

Если dest != 0, то буфер [count]dest корректен и его размер достаточен для размещения декодированных данных.

Буферы dest и src не пересекаются.

b64IsValid(src) == TRUE.

Прим.

Декодированные данные всегда уместятся
в буфер из 3 * strLen(src) / 4 октетов.

Аргументы

dest память-приемник  
count размер dest / декодированных данных  
src строка-источник

Автор

Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.

Info

Вт 23 Янв 2024 00:00:00 Библиотека Bee2