【问题标题】:Storing crypted data with libconfig使用 libconfig 存储加密数据
【发布时间】:2016-10-15 07:56:24
【问题描述】:

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

【问题讨论】:

  • 使用base64对您的加密内容进行编码。

标签: c++ c linux libconfig


【解决方案1】:

您可以使用 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.

【讨论】:

  • 就我而言,使用算法转换为 base64 解决了问题
【解决方案2】:

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

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

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

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

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

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

【讨论】:

    猜你喜欢
    • 2015-11-05
    • 2011-04-26
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2021-04-10
    相关资源
    最近更新 更多