使用 libconfig 存储加密数据

Storing crypted data with libconfig

我正在使用 libconfig 创建配置文件,其中一个字段是加密文件的内容。出现此问题是因为文件中有一些转义字符导致内容的部分存储。存储此数据以避免意外转义字符的最佳方法是什么?转换成unicode? 有什么建议吗?

您可以使用 URL 编码,其中每个非 ASCII 字符编码为 % 字符后跟两个十六进制数字,或者您案例使用 base64 编码,其中每组 3 个字节被编码为 4 个 ASCII 字符(3x8 位 -> 4x6 位)。

例如,如果您有以下字节:

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.

文本中的二进制数据编码标准以前是uuencode,现在是base64。两者使用相同的范例:一个字节使用 8 位,因此 3 个字节使用 24 位或 4 个 6 位字符。

uuencode 仅使用偏移量为 32 的 6 位(space 的 ascii 代码),因此字符在 32-96 范围内 => 全部在可打印的 ascii 范围内,但包括 space以及可能具有特殊含义的其他字符

base64 选择这 64 个字符来表示从 0 到 63 的值(没有 =:;,'"\*(){}[] 可能具有特殊含义...):

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

和等号(=)作为空位置的占位符和编码字符串的结尾,以确保编码字符串长度是4的倍数。

不幸的是,C 和 C++ 标准库都没有为 uuencode 提供函数而不是 base 64 转换,但是你可以找到很好的实现,在这个其他 SO 答案中有很多指针:How do I base64 encode (decode) in C?