可逆字符串压缩 PHP/C++
Reversible string compression PHP/C++
我想混淆一些短文本数据,并进行压缩learnable/memorizable。
所以我正在寻找一种可在 PHP 中实现的算法,将字符串(~25 个字符长)压缩为~8 个字符的字符串,然后在 C++ 中可逆。
有人知道算法名称或其他想法吗?
编辑:一切都是小写,有两个特殊字符。
由于文本数据仅由小写字母和两个特殊字符组成,因此我们只需要考虑 28 个不同的字符。
我们可以通过属性的位表示来设计哈希函数。通过 5 位的所有可能组合,我们可以唯一地表示 32 个不同的符号。因此,要表示 28 个不同的符号,每个符号只需要 5 位。
a => 00000
b => 00001
c => 00010
......
......
......
y => 11000
z => 11001
special-character-1 => 11010
special-character-2 => 11011
采用这种编码方案,我们只需要25 * 5 = 125位来表示完整的文本数据,即125 / 8 ~ 16字节或16个字符(抱歉不是8个字符)。
现在,您可以通过应用反向映射从这 16 个字符的哈希中检索实际的字符串。
如果您对 16 个字符的可逆哈希感到满意,我可以提供 C++ 实现。
不可能。
如果我们假设原始字符串只包含字母A-Z,则有2625 ≈ 4.25 x 1037 (420亿billion billion) 可能的输入字符串。
如果我们然后慷慨地允许八个字符的输出包含任何字母、大写或小写或数字(总共 26 + 26 + 10 = 62 个字符),则有 628 ≈ 2.18 x 1014(2.18 亿亿)可能的输出。
这大约减少了 1023 倍!根据 pigeonhole principle,您要求的压缩方案是不可能的 - 可能的输入字符串比输出字符串多 很多 倍,因此没有办法可逆地转换每个字符串将输入字符串转换为输出并返回。
我想混淆一些短文本数据,并进行压缩learnable/memorizable。
所以我正在寻找一种可在 PHP 中实现的算法,将字符串(~25 个字符长)压缩为~8 个字符的字符串,然后在 C++ 中可逆。
有人知道算法名称或其他想法吗?
编辑:一切都是小写,有两个特殊字符。
由于文本数据仅由小写字母和两个特殊字符组成,因此我们只需要考虑 28 个不同的字符。
我们可以通过属性的位表示来设计哈希函数。通过 5 位的所有可能组合,我们可以唯一地表示 32 个不同的符号。因此,要表示 28 个不同的符号,每个符号只需要 5 位。
a => 00000
b => 00001
c => 00010
......
......
......
y => 11000
z => 11001
special-character-1 => 11010
special-character-2 => 11011
采用这种编码方案,我们只需要25 * 5 = 125位来表示完整的文本数据,即125 / 8 ~ 16字节或16个字符(抱歉不是8个字符)。
现在,您可以通过应用反向映射从这 16 个字符的哈希中检索实际的字符串。
如果您对 16 个字符的可逆哈希感到满意,我可以提供 C++ 实现。
不可能。
如果我们假设原始字符串只包含字母A-Z,则有2625 ≈ 4.25 x 1037 (420亿billion billion) 可能的输入字符串。
如果我们然后慷慨地允许八个字符的输出包含任何字母、大写或小写或数字(总共 26 + 26 + 10 = 62 个字符),则有 628 ≈ 2.18 x 1014(2.18 亿亿)可能的输出。
这大约减少了 1023 倍!根据 pigeonhole principle,您要求的压缩方案是不可能的 - 可能的输入字符串比输出字符串多 很多 倍,因此没有办法可逆地转换每个字符串将输入字符串转换为输出并返回。