Хеширование паролей Django отличается от библиотеки Python passlib pbkdf2Python

Программы на Python
Anonymous
Хеширование паролей Django отличается от библиотеки Python passlib pbkdf2

Сообщение Anonymous »

С помощью администратора django я создал пользователя

Код: Выделить всё

email: cuteemail@example.com
password: ccpass!ccpass
Хешированный пароль, хранящийся в базе данных:

Код: Выделить всё

pbkdf2_sha256$260000$alGB1h2BRHwn83nz9fSJ3V$qippfbL8g59KPoDh+cIEh70TQCjuWeH8017VcLLpDIY=
Все, что я знаю, это то, что django генерирует хеш пароля с использованием алгоритма PBKDF2.
Мне нужно запустить чистый скрипт Python, который внутри своей части проверяет, соответствует ли пароль хешу. Я нашел библиотеку passlib. Могу предоставить пароль и раунды. Но откуда берется соль Джанго?

Код: Выделить всё

from passlib.hash import pbkdf2_sha256

password = 'ccpass!ccpass'
db_hashed_password = 'pbkdf2_sha256$260000$alGB1h2BRHwn83nz9fSJ3V$qippfbL8g59KPoDh+cIEh70TQCjuWeH8017VcLLpDIY='

salt = db_hashed_password.split('$')[2].encode()
pbkdf2_sha256.hash(password, rounds=260000, salt=salt)
результат:

Код: Выделить всё

$pbkdf2-sha256$260000$YWxHQjFoMkJSSHduODNuejlmU0ozVg$qippfbL8g59KPoDh.cIEh70TQCjuWeH8017VcLLpDIY
Полученный хэш пароля выглядит одинаково, за исключением незначительных различий.
В pbkdf2-sha256 вместо подчеркивания используется тире, но Это не проблема. Я могу это исправить.
Основная проблема в том, что я получаю . вместо + в фактической части хеша. Как это исправить? Могу ли я слепо заменить все . на + ?
Я тоже не понимаю, почему вычисленная соль отличается от исходной соли?

Подробнее здесь: https://stackoverflow.com/questions/739 ... f2-library

Вернуться в «Python»