使用 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?
我正在使用 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?