【问题标题】:Compress string, then uncompress the string?压缩字符串,然后解压缩字符串?
【发布时间】:2012-06-01 21:59:05
【问题描述】:

我现在正在处理数十万行字符串。无论如何我可以将字符串压缩为像 MD5 一样,然后解压缩它?

【问题讨论】:

  • 不使用 MD5、SHA 等哈希函数。它需要是加密质量函数,或者更可能是实际的压缩算法。
  • 首先MD5不是压缩,它是一个hash,只有一种方式,其次MD5又老又坏,不要用。你说你想要压缩,而不是加密,所以考虑使用 GZIP 之类的东西。
  • 在 MD5 上应该用什么代替?为什么坏了?
  • @AshBurlaczenko - MD5 是一种“不可逆”的散列函数,不适用于压缩(或加密)。这意味着在实践中是单向的。
  • SHA2 被大多数安全机构认为是安全的。 MD5 可以在几分钟内被破坏,因为它不是防碰撞的(实际上很容易产生碰撞)。在某些网站上,您可以通过发布 MD5 哈希对其进行逆向工程。只是不安全。但是它只对散列操作有用,而不是压缩或双向加密和解密。

标签: php mysql string function compression


【解决方案1】:

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

$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 不是压缩而是散列。

另请参阅:How to compress/decompress a long query string in PHP?

【讨论】:

  • 只是想到“按请求”提及压缩和解压缩不会节省任何费用,而不是先压缩然后工作,然后再解压缩。至少在没有测试的情况下,我怀疑压缩总是最好的方法。
  • 当然,示例中的字符串没有任何好处,下面是一个更好的示例:codepad.viper-7.com/JtvTCk - 只有压缩后的字符串不那么长才有意义。
  • 为了澄清,我的意思是 MD5 作为字符串的外观/ect。我不是故意的。不过谢谢。
  • 为此你可以使用bin2hex,但是我建议你使用base64_encode,因为你的字符串会更小/更短。
【解决方案2】:

看看 PHP 提供的 ZLib 函数:http://us.php.net/manual/en/ref.zlib.php

您可以使用gzencode()gzdecode() 的组合,或者gzdeflate()gzinflate() 的组合,或者gzcompress()gzuncompress() 的组合。请记住使用与您使用的压缩函数相匹配的解压缩函数,因为这三对函数都返回(或接受)略有不同的数据。

您可能需要进行一些实际测试来确定这些对中的哪一对最适合您。祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 2013-10-30
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多