Хранение зашифрованных данных с помощью libconfig

Я использую libconfig для создания файла конфигурации, и одним из полей является содержимое зашифрованного файла. Проблема возникает из-за того, что в файле есть некоторые экранирующие символы, что вызывает частичное хранение содержимого. Каков наилучший способ хранения этих данных, чтобы избежать случайного побега символа? Преобразовать в юникод?
Любое предложение?

4

Решение

Вы можете использовать либо Кодировка URL, где каждый не-ASCII символ кодируется как % символ, за которым следуют две шестнадцатеричные цифры, или вы используете регистр кодировка base64, где каждый набор из 3 байтов кодируется в 4 символа ASCII (3×8 бит -> 4×6 бит).

Например, если у вас есть следующие байты:

00 01 41 31 80 FE

Вы можете URL кодировать его следующим образом:

%00%01A1%80%FE

Или вы можете base64 кодировать его следующим образом: 0-25 = A-Z, 26-51 = a-z, 52-62 = 0-9, 62 =., 63 = /:

(00000000 00000001 01000001) (00110001 10000000 11111110) -->
(000000 000000 000101 000001) (001100 011000 000011 111110)

AAJBNYD.
2

Другие решения

Стандарт для кодирования двоичных данных в тексте раньше был uuencode и теперь base64. Оба используют одну и ту же парадигму: байт использует 8 бит, поэтому 3 байта используют 24-битные или 4-битные 6-битные символы.

uuencode только что использовал 6 бит со смещением 32 (код ascii для пробела), поэтому символы находятся в диапазоне 32-96 => все в диапазоне для печати ascii, но включают пробел и, возможно, другие символы, которые могут иметь специальные значения

base64 выбрал эти 64 символа для представления значений от 0 до 63 (нет =:;,'"\*(){}[] это может иметь особое значение …)

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

и знак равенства (=) является заполнителем для пустых позиций и конца кодированной строки, чтобы гарантировать, что длина кодированной строки кратна 4.

К сожалению, ни стандартная библиотека C, ни C ++ не предлагают функций для uuencode, а не для преобразования base 64, но вы можете найти хорошие реализации вокруг, со многими указателями в этом другом ответе SO: Как base64 кодировать (декодировать) в C?

1

По вопросам рекламы [email protected]