【发布时间】:2017-02-10 19:56:37
【问题描述】:
我正在尝试编写一些代码来防止更新已修改列表。为此,我正在计算值的 SHA1 哈希,但是当我重新启动 ipython 解释器时,此哈希的 hexdigest() 会产生不同的结果。这是为什么呢?
In [1]: import hashlib
In [2]: hashid = hashlib.sha1()
In [3]: hashid.update(repr(frozenset(sorted(["a","b","c"]))).encode("utf-8"))
In [4]: hashid.hexdigest()
Out[4]: '53ca01b21fd7cb1996634bb45ad74851f73c45d3'
当重新初始化 hashid 并在同一个 ipython3 控制台中再次进行哈希计算时,它可以工作:
In [5]: hashid = hashlib.sha1()
In [6]: hashid.update(repr(frozenset(sorted(["a","b","c"]))).encode("utf-8"))
In [7]: hashid.hexdigest()
Out[7]: '53ca01b21fd7cb1996634bb45ad74851f73c45d3'
但是停止我的控制台并重新启动它会产生不同的结果:
In [7]: exit
rvl@laptop ~/ $ ipython3
In [1]: import hashlib
In [2]: hashid = hashlib.sha1()
In [3]: hashid.update(repr(frozenset(sorted(["a","b","c"]))).encode("utf-8"))
In [4]: hashid.hexdigest()
Out[4]: '6e5813fcb173e35e81d6138eab4d21482885e7eb'
这是为什么?当拥有相同的排序列表时,如何产生相同的 SHA1 哈希/十六进制摘要结果?
【问题讨论】:
标签: python-3.x hash sha1