可逆字符串压缩PHP / C ++

时间:2017-03-25 16:59:54

标签: php c++ algorithm compression obfuscation

我想混淆一些短文本数据,并使这种压缩可以学习/可记忆。

所以我正在寻找一种可以在PHP中实现的算法,将一个字符串(约25个字符长)压缩成一个~8个字符的字符串,然后在C ++中可逆。

是否有人有算法名称或其他想法?

编辑:一切都是小写的,有两个特殊字符。

2 个答案:

答案 0 :(得分:0)

由于文本数据只包含小写字母和两个特殊字符,因此我们只考虑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 ++实现。

答案 1 :(得分:0)

不可能。

如果我们假设原始字符串只包含字母AZ,则有26个 25 ≈4.25x 10 37 (42亿亿亿亿)可能的输入字符串。< / p>

如果我们慷慨地允许八个字符的输出包含任何字母,大写或小写或数字(26 + 26 + 10 =总共62个字符),则有62个 8 ≈2.18x 10 14 (218,000亿)可能的产出。

这大约是10 23 次!通过pigeonhole principle,你所要求的压缩方案是不可能的 - 输出字符串比输出多很多倍,所以没有办法可逆将每个输入字符串转换为输出并返回。