返回32位字符串的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是不可能做到的(但如果可以的话请告诉我),有没有什么压缩函数可以用,最后也能得到一个32位的字符串,而且可以还原回去?
补充说明:被编码的字符串是一个网址,所以最多也就几百个字符,通常情况下会更少。
谢谢
2 个回答
4
你似乎想要两件无法同时实现的事情:
- 任何长度的字符串都被转换成恰好32个字节的格式,即使它最开始是4GB的大小
- 编码后的字符串可以无损地被解码
MD5哈希中只有有限的位数,所以根据鸽巢原理,它是不可能被反向解码的。如果可以反向解码,你就可以用哈希来无限压缩信息。此外,不可逆性是哈希的主要特点;它们是单向函数。加密算法是可以反向解码的,但需要更多的字节来存储密文,因为可解码性意味着它们必须是无冲突的(两个明文不能编码成相同的密文,否则解码函数就不知道该输出哪个明文了)
4
我觉得你不是在找哈希或者加密,而是在找压缩。你可以试试 zlib
和 base64 编码:
s = 'Hello, world'
encoded = zlib.compress(s).encode('base64')
编码后的数据长度会随着输入的增加而增加,但这可能对你有用。
即使你只限制在网址上,也没有办法把它们可逆地映射到32个字符的字符串,因为可能的网址实在是太多了。