Как создать отдельные экземпляры алгоритма хеширования в Python?
hashlib
содержит реализации для алгоритмов хеширования. К сожалению, два последовательных звонка hashlib.sha256()
не создавать два разных экземпляра SHA256, но один и тот же: если вызывается дважды hashlib.sha256()
будет возвращать один и тот же объект каждый раз. Итак, по-видимому, у нас есть синглтон здесь
Это плохо во всех ситуациях, когда требуется какой-либо параллелизм. Кроме того, это очень плохо в ситуациях, когда вы хотите предоставить объект хеширования для какого-либо алгоритма. В моем случае: тесты не выполняются, поскольку один и тот же объект используется повторно вместо создания нового.
Мой вопрос: как мне создать два экземпляра SHA256 (или любого другого алгоритма хеширования)?
Пример:
import hashlib
print(hashlib.sha256())
print(hashlib.sha256())
Это выведет что-то вроде:
<sha256 HASH object @ 0x7fb3611b4710>
<sha256 HASH object @ 0x7fb3611b4710>
1 ответ
В вашем первом примере второй хеш-объект создается после того, как ваш первый хеш-объект был собран сборщиком мусора. Поэтому они могут иметь один и тот же адрес памяти. В hashlib.sha256() is hashlib.sha256()
первый не может быть собран мусором, так как его нужно сравнивать первым. Вы можете сохранить хеш-объекты в переменных, чтобы сохранить их живыми:
h1 = hashlib.sha256()
h2 = hashlib.sha256()
print(h1 is h2)
[Output]
False