簡體   English   中英

可逆字符串壓縮PHP / C ++

[英]Reversible string compression PHP/C++

我想混淆一些短文本數據,並使此壓縮易於學習/記憶。

因此,我正在尋找一種可在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 ++實現。

不可能。

如果我們假設原始字符串只包含字母AZ,有26 25≈4.25×10 37(42十億十億十億十億)可能的輸入字符串。

如果我們然后慷慨允許的八字輸出到包含任何字母,大寫或小寫,或數字(26 + 26 + 10 = 62個字符),有62個8≈2.18×10 14(2.18億十億)可能的輸出。

這大約少了10 23倍! 根據信鴿原則 ,您所要求的壓縮方案是不可能的-輸入字符串的數目比輸出數目大很多 ,因此無法將每個輸入字符串可逆地轉換為輸出並返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM