如何从元组中得到一个持久化哈希值?使用Python实现。

7
我需要从元组中生成哈希值。理想情况下,我希望能够从列表中生成哈希值,但这是不可能的。我需要一些东西,可以使用哈希值将元组生成回来,最终以正确顺序访问包含字符串项的原始列表。
以下是我要生成哈希值的内容:
l = ['x', 'y', 'z']
t = tuple(l)

我尝试使用hash(),但是在不同的Python会话中得到的哈希值不同,而这是我需要的。

我需要哈希值,因为我想创建一个以该列表为基础且文件名为哈希值的文件。然后我想通过查找文件名并仅使用哈希值就能够访问列表项目(以正确的顺序)。

我的理解是这是可能的,但我可能错了。有什么想法吗?


3
你需要的不是哈希。这是因为哈希算法并不适用于把密文还原成明文。我理解你需要一种方法,可以使用哈希算法生成一个元组,然后能够通过该元组来还原出原始数据。 - user2357112
好的,那我应该研究什么? - Darius Mandres
@user2357112:也许是措辞的问题。"In need the hash..." 段落更好地描述了用例:使用哈希作为文件名从文件中检索存储的值。 - Amadan
相关链接:https://dev59.com/wr3pa4cB1Zd3GeqPjbPz - Albert
3个回答

4

您可以使用MD5,它速度快,并且始终为相同的输入提供相同的结果。

import hashlib
    
t = ('x', 'y', 'z')

m = hashlib.md5()
for s in t:
    m.update(s.encode())
fn = m.hexdigest() # => 'd16fb36f0911f878998c136191af705e'

正如user2357112所说,您无法从fn重构出l;但是如果l保存在具有MD5哈希的文件中,您将能够读取它。

那最后一部分就是这样了,将l保存在文件中似乎是正确的方法。谢谢! - Darius Mandres

2

如果你的元组包含字符串并且使用内置的 hash() 函数,则不可能实现此目标。

Python故意使字符串的哈希在不同的Python会话中变化,因为在Python 3.4中,它引发了潜在的安全问题(PEP 456)。在Python 3.5中,通过使字符串的哈希在每个Python会话中都不同来解决了这个问题。

我建议您创建自己的哈希函数以使其稳定,或者使用一些hashlib


1
如果我早些发现这个,它本可以为我节省数小时的时间... - grssnbchr

-1

哈希理论上是不可逆的。加密似乎是你想要的。例如,base64

================== 更新

base64是编码技术。输入链接描述

也许加密或编码是你想要的。


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