压缩字符串,然后解压字符串?

7

我现在正在处理数十万行的字符串。有没有办法将这个字符串压缩成类似于MD5的形式,然后再解压它呢?


1
不使用像MD5、SHA等哈希函数。它需要是一个加密质量的函数,或者更可能是一个实际的压缩算法。 - Jared Farrish
首先,MD5 不是压缩,而是哈希函数,只能单向运行;其次,MD5 已经老旧且不安全,请勿使用。您说您需要压缩而非加密,因此可以考虑使用类似 GZIP 的东西。 - Jeff Watkins
在MD5之后应该使用什么?为什么它已经被破解了? - Ash Burlaczenko
@AshBurlaczenko - MD5是一种“不可逆”的哈希函数,不适用于压缩(或加密)。它在实践中被设计为单向的。 - Jared Farrish
问题是“为什么它坏了?”,我回答了 :) - Jeff Watkins
显示剩余2条评论
2个回答

14

是的,您可以在PHP中压缩和解压字符串(演示):

$str = 'Hello I am a very very very very long string';
$compressed = gzcompress($str, 9);
$uncompressed = gzuncompress($compressed);

echo $str, "\n";
echo $uncompressed, "\n";
echo base64_encode($compressed), "\n";
echo bin2hex($compressed), "\n";
echo urlencode($compressed), "\n";

然而,MD5并不是压缩而是哈希。
另请参阅:如何在PHP中压缩/解压长查询字符串?

只是提到根据请求压缩和解压缩不会节省任何东西,与先压缩再处理,然后在以后某个时间解压缩相反。至少没有经过测试,我怀疑压缩并不总是最好的方法。 - Jared Farrish
当然,示例中的字符串没有任何好处,以下是一个更好的示例:http://codepad.viper-7.com/JtvTCk - 只有在压缩后的字符串较短时才有意义。 - hakre
澄清一下,我的意思是MD5作为字符串的样子/等等。我并不是想要表达别的意思。但还是谢谢你。 - Jake
你可以使用 bin2hex,但我建议你使用 base64_encode,因为这样你的字符串会更小/更短。 - hakre

3
请查看PHP提供的ZLib函数:http://us.php.net/manual/en/ref.zlib.php 您可以使用gzencode()gzdecode()的组合,或gzdeflate()gzinflate()的组合,或gzcompress()gzuncompress()的组合。只需记住使用与您使用的压缩函数匹配的解压函数,因为这三对函数返回(或接受)略有不同的数据。
您可能需要进行一些实际测试来确定哪个组合最适合您。祝你好运!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接