Код Middle Криптография на практике и JWT обновлено

Проверка пароля по хешу PBKDF2

Условие

Пароли хранятся строкой pbkdf2_sha256$<итерации>$<соль>$<хеш hex>, где хеш это hashlib.pbkdf2_hmac("sha256", пароль, соль, итерации) (пароль и соль в UTF-8).

Напишите verify_password(password, stored): верните True, если пароль подходит. Неизвестный алгоритм, неверное число частей, нечисловые или неположительные итерации дают False. Сравнивайте за постоянное время.

Примеры

verify_password("correct horse", "pbkdf2_sha256$1000$s4lt$59ff829a306e60f15cf4a232e32629fe7275463b2f246997bfc2d33d2cb3c6a4") // true
verify_password("correct horse!", "pbkdf2_sha256$1000$s4lt$59ff829a306e60f15cf4a232e32629fe7275463b2f246997bfc2d33d2cb3c6a4") // false
verify_password("пароль", "pbkdf2_sha256$500$соль$54f939ed37332dffcd4db2491a939a819d2a43a96e2da089fabd6b2159cd751c") // true

Как подойти

Подсказки: 2
  1. stored.split("$") даёт 4 части.
  2. hmac.compare_digest работает и со строками ASCII.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.