python 3 hashlib.sha256 (). update (newcontent), похоже, не перезаписывает старый контент - PullRequest
0 голосов
/ 11 декабря 2018

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

Например, при наличии строкового журнала

hasher = hashlib.sha256() #set the hasher

hasher.update(magazine.encode('utf-8'))
print( int( hasher.hexdigest(), 16 ) % 10**8)

hasher.update(magazine.encode('utf-8'))
print( int( hasher.hexdigest(), 16 ) % 10**8)

напечатает 73983538 65808855

hasher = hashlib.sha256()
hasher.update(magazine.encode('utf-8'))
print( int( hasher.hexdigest(), 16 ) % 10**8)

hasher = hashlib.sha256() #reset the hasher
hasher.update(magazine.encode('utf-8'))
print( int( hasher.hexdigest(), 16 ) % 10**8)

напечатает
73983538 73983538

Что такое функция обновления, и есть ли способ сбросить строку без создания нового хэша?

Большое спасибо,

1 Ответ

0 голосов
/ 11 декабря 2018

Почему вы не хотите создать новый хеш?Один хеш представляет хэш одной «вещи», метод обновления существует, так что вы можете хэшировать большие объемы данных (некоторое количество байтов за раз).То есть и

hasher = hashlib.sha256()
hasher.update(b"foo")
hasher.update(b"bar")

и

hasher = hashlib.sha256()
hasher.update(b"foobar")

приводят к одному и тому же хешу.

Невозможно сбросить состояние объекта хеша, так как состояние isnдаже (напрямую) доступен через Python (как написано в C).

...