Как создать отдельные экземпляры алгоритма хеширования в Python? - PullRequest
0 голосов
/ 26 февраля 2019

hashlib содержит реализации для алгоритмов хеширования.К сожалению, два последовательных вызова hashlib.sha256() не производят два разных экземпляра SHA256, но один и тот же: при повторном вызове hashlib.sha256() будет возвращать один и тот же объект каждый раз.Итак, очевидно, у нас есть синглтон здесь

Это плохо во всех ситуациях, когда требуется какой-либо параллелизм.Кроме того, это очень плохо в ситуациях, когда вы хотите предоставить объект хеширования для какого-либо алгоритма.В моем случае: тесты не выполняются, поскольку один и тот же объект используется повторно вместо создания нового.

Мой вопрос: как создать два экземпляра SHA256 (или любого другого алгоритма хеширования)?

Пример:

import hashlib

print(hashlib.sha256())
print(hashlib.sha256())

Будет выведено что-то вроде:

<sha256 HASH object @ 0x7fb3611b4710>
<sha256 HASH object @ 0x7fb3611b4710>

1 Ответ

0 голосов
/ 26 февраля 2019

В вашем первом примере второй хеш-объект создается после того, как ваш первый хеш-объект был собран сборщиком мусора.Поэтому они могут иметь один и тот же адрес памяти.В hashlib.sha256() is hashlib.sha256() первый не может быть собран сборщиком мусора, так как он должен сравниваться первым.Вы можете сохранить хеш-объекты в переменных, чтобы сохранить их живыми:

h1 = hashlib.sha256()
h2 = hashlib.sha256()
print(h1 is h2)

[Output]
False
...