python压缩函数返回32位字符串?

时间:2010-06-28 14:03:50

标签: python

我正在使用md5函数将字符串散列为32位字符串。

str_to_encode = 'this is a test string which I want to encode'
encoded = hashlib.md5(str_to_encode).hexdigest() 

我希望能够将此字符串(即上例中的encoded)解码回其原始值。我认为这不可能使用md5(但如果它是请让我知道),但是有一个我可以使用的compressn函数,它会在最后给我一个32位的字符串但是可以还原吗?

编辑: 被编码的字符串是一个url,因此最多只有几百个字符,尽管在大多数情况下它会少很多。

谢谢

2 个答案:

答案 0 :(得分:4)

你似乎想要两件不能共存的东西:

  • 任何长度的字符串都会转换为32字节,即使它以4gb
  • 开头
  • 编码字符串可解码而不会丢失信息

MD5哈希中只有这么多位,所以pigeonhole principle无法反转它。如果它是可逆的,你可以使用哈希无限压缩信息。此外,不可逆性是哈希的主要观点;它们的目的是成为单向函数。加密算法是可逆的,但需要更多的字节来存储密文,因为可解码意味着它们必须是无冲突的(两个明文不能编码为相同的密文,否则解码函数不会知道给定密文输出哪个明文)

答案 1 :(得分:4)

在我看来,你不是在寻找哈希或加密,而是在寻找压缩。试试zlib和base64编码:

s = 'Hello, world'
encoded = zlib.compress(s).encode('base64')

编码数据的长度将随着输入的增长而增长,但它可能适合您。

即使将自己限制在URL,也无法将它们可逆地映射到32个字符的字符串,只有太多可能的URL。