如何在 Python 中创建散列算法的单独实例?
How to create separate instances of a hash algorithm in Python?
hashlib
包含哈希算法的实现。不幸的是,对 hashlib.sha256()
的两次连续调用不会生成两个不同的 SHA256 实例,而是生成同一个实例:如果调用两次 hashlib.sha256()
,则每次都会 return 相同的对象。所以显然我们这里有一个单身人士
这在需要任何类型的并发的所有情况下都是不好的。此外,在您想为某些算法提供散列对象的情况下,这非常糟糕。在我的例子中:测试失败,因为同一个对象被重复使用而不是创建一个新对象。
我的问题:如何创建 SHA256(或任何其他哈希算法)的两个实例?
示例:
import hashlib
print(hashlib.sha256())
print(hashlib.sha256())
这将输出如下内容:
<sha256 HASH object @ 0x7fb3611b4710>
<sha256 HASH object @ 0x7fb3611b4710>
在您的第一个示例中,第二个哈希对象是在您的第一个哈希对象被垃圾回收后创建的。因此它们可以有相同的内存地址。在 hashlib.sha256() is hashlib.sha256()
中,第一个不能被垃圾收集,因为必须先比较它。您可以将散列对象保存在变量中以使其保持活动状态:
h1 = hashlib.sha256()
h2 = hashlib.sha256()
print(h1 is h2)
[Output]
False
hashlib
包含哈希算法的实现。不幸的是,对 hashlib.sha256()
的两次连续调用不会生成两个不同的 SHA256 实例,而是生成同一个实例:如果调用两次 hashlib.sha256()
,则每次都会 return 相同的对象。所以显然我们这里有一个单身人士
这在需要任何类型的并发的所有情况下都是不好的。此外,在您想为某些算法提供散列对象的情况下,这非常糟糕。在我的例子中:测试失败,因为同一个对象被重复使用而不是创建一个新对象。
我的问题:如何创建 SHA256(或任何其他哈希算法)的两个实例?
示例:
import hashlib
print(hashlib.sha256())
print(hashlib.sha256())
这将输出如下内容:
<sha256 HASH object @ 0x7fb3611b4710>
<sha256 HASH object @ 0x7fb3611b4710>
在您的第一个示例中,第二个哈希对象是在您的第一个哈希对象被垃圾回收后创建的。因此它们可以有相同的内存地址。在 hashlib.sha256() is hashlib.sha256()
中,第一个不能被垃圾收集,因为必须先比较它。您可以将散列对象保存在变量中以使其保持活动状态:
h1 = hashlib.sha256()
h2 = hashlib.sha256()
print(h1 is h2)
[Output]
False