Хорошо, я пытаюсь написать базовый преобразователь строки в md5
хэш-код, но когда я запускаю свою программу, я продолжаю получать сообщение об ошибке:
Traceback (most recent call last):
File "C:\Users\Shane\Documents\Amer CISC\lab4.py", line 30, in <module>
assertEqual (computeMD5hash("The quick brown fox jumps over the lazy dog"),("9e107d9d372bb6826bd81d3542a419d6"))
File "C:\Users\Shane\Documents\Amer CISC\lab4.py", line 27, in computeMD5hash
m.update(string)
TypeError: Unicode-objects must be encoded before hashing
Мой код выглядит так:
def computeMD5hash(string):
import hashlib
from hashlib import md5
m = hashlib.md5()
m.update((string))
md5string=m.digest()
return md5string
Решение проблемы
Как следует из ошибки, у вас string
должен быть юникод, и вы должны его закодировать. Глядя на вызов, который вы делаете (из трассировки стека):
computeMD5hash("The quick brown fox jumps over the lazy dog")
похоже, вы должны использовать Python 3, где строки являются объектами Unicode. Чтобы закодировать в байтовое представление, которое затем может быть обработано хэш-библиотекой, измените это
m.update((string))
к этому (если utf-8 является подходящей для вас кодировкой - это зависит от того, как вы будете это использовать):
m.update(string.encode('utf-8'))
Если это все новости для вас, вам, вероятно, следует прочитать отличный Python 3 Unicode HOWTO.
Кроме того, пока я здесь, ваш код имеет некоторые другие проблемы
from hashlib import
строке или временном файле md5string
.import hashlib
их следует переместить в область модуля.digest()
необработанный двоичный файл, и из вашей трассировки стека похоже, что вы ожидаете hexdigest()
вместо этого то же самое, представленное в виде шестнадцатеричной строки.Чтобы все исправить и привести в порядок, попробуйте следующее:
import hashlib
def computeMD5hash(my_string):
m = hashlib.md5()
m.update(my_string.encode('utf-8'))
return m.hexdigest()
Комментариев нет:
Отправить комментарий