GOOGLE ADS

суббота, 7 мая 2022 г.

преобразовать строку в MD5

Хорошо, я пытаюсь написать базовый преобразователь строки в 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()

    Комментариев нет:

    Отправить комментарий

    Laravel Datatable addColumn returns ID of one record only

    Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...