Вы сравниваете два хэш-объекта, а не просто сравниваете их дайджесты.
Измените if
на if converted.digest() == real.digest()
, и это должно сработать.
Выполнив if converted == real
you 'фактически сравниваем два объекта, которые, хотя они и представляют хеш-объект, который выполняет хеширование для одной и той же вещи, являются разными объектами, и поскольку hashlib
хеш-объекты не реализуют __cmp__
, __eq__
или __ne__
, они возвращаются к сравнению двух объектов по тождеству , которое, поскольку они являются двумя различными объектами, вернет false.
Из ссылки на документ:
ЕслиОперация __cmp__()
, __eq__()
или __ne__()
не определена, экземпляры классов сравниваются по идентификатору объекта («адресу»).
Вы можете увидеть, что эти объекты не реализуют эти операторы, выполнив с ними dir()
:
>>> test = hashlib.sha512('test')
>>> dir(test)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__',
'__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
'__sizeof__', '__str__', '__subclasshook__', 'block_size', 'copy', 'digest',
'digest_size', 'digestsize', 'hexdigest', 'name', 'update']