使用libconfig存储加密数据

时间:2016-06-14 14:10:34

标签: c++ c linux libconfig

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

2 个答案:

答案 0 :(得分:2)

您可以使用网址编码,其中每个非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.

答案 1 :(得分:1)

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

uuencode刚刚使用了偏移量为32的6位(ascii代码用于空格),因此字符在32-96 =>范围内。全部在可打印的ascii范围内,但包括空格和可能具有特殊含义的其他角色

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

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

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

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