Найти - Пользователи
Полная версия: Подлянка в библиотеке hashlib
Начало » Python для новичков » Подлянка в библиотеке hashlib
1
chusva
В библиотеке hashlib я обнаружил то ли баг, то ли фичу, или я чего-то не понимаю. Суть в том, что библиотекой hashlib хэш можно сгенерировать только один раз. После создания первого хэша, последующие хэши будут одни и те же при разных входных данных. Для понимания ситуации даю простенький код:
 import hashlib
class User:
    def __init__(self, login: str, password: str):
        self.login = login
        self.password = password
        self.passhash = hashlib.md5(b'{password}').hexdigest()
    def __str__(self):
        return f"Login: {self.login}\t Password: {self.password}\t Hash: {self.passhash}"
lstusers = [
        User('admin', 'qwerty'),
        User('user1', '123456'),
        User('user2', '987654'),
        ]
for user in lstusers:
    print(user)

После запуска этого кода вы увидите, что при совершенно разных паролях хэши этих паролей всегда будут одинаковыми, и все они от первого. Об этой фиче нигде в документации не упоминается. Я смотрел и на русском и на английском языках.
У меня возникли вопросы: Есть ли ещё какая-нибудь в Python альтернатива hashlib'у? Или этот баг как-то можно преодолеть?
DeeKeiD
Потому что ты хешируешь строку “password” вместо содержания переменной password.
self.passhash = hashlib.md5(password.encode()).hexdigest()
Rodegast
 import hashlib
 
>>> hashlib.md5(b"qwerty").hexdigest()
'd8578edf8458ce06fbc5bb76a58c5ca4'
 
>>> hashlib.md5(b"123456").hexdigest()
'e10adc3949ba59abbe56e057f20f883e'
 
>>> hashlib.md5(b"987654").hexdigest()
'6c44e5cd17f0019c64b042e4a745412a'
chusva
DeeKeiD
Потому что ты хешируешь строку “password” вместо содержания переменной password.self.passhash = hashlib.md5(password.encode()).hexdigest()

Спасибо за науку!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB