Как создать отдельные экземпляры алгоритма хеширования в 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
Другие вопросы по тегам