Проверьте хешированный пароль Moodle

Moodle сохраняет хешированные пароли в таблице пользователей в следующем формате:

If the stored password is:

$2y$10$UB6vKrpw227eqVXj2PiPou9c0eRtxsdU02fo9.wc3VtsA2FI.gS6a
then:
$2y$ = the id of the hashing algorithm used (crypt_blowfish), enclosed in dollar signs.
10$ = the cost of using that algorithm (two digits) followed by a dollar sign.
UB6vKrpw227eqVXj2PiPou = randomly generated secure salt (22 characters).
9c0eRtxsdU02fo9.wc3VtsA2FI.gS6a = the hash (31 characters).

У меня простой текстовый пароль. Я не могу понять, как это проверить с помощью Python.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
0
439
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это просто делается с помощью bcrypt:

pip install bcrypt

Тогда остается лишь вызвать функцию checkpw():

import bcrypt

hashed = b'$2y$10$UB6vKrpw227eqVXj2PiPou9c0eRtxsdU02fo9.wc3VtsA2FI.gS6a'

password = input('Enter password:').encode()
if bcrypt.checkpw(password, hashed):
    print('Correct password entered!')
else:
    print('Password is wrong!')

Обратите внимание, что bcrypt работает с байтами, а не со строками, поэтому пользовательский ввод должен выполняться через .encode().

Разве это не pip install py-bcrypt, да и hashed кажется статичным.

sphoenix 04.11.2018 13:20

а также запустив код, я получаю ошибку ValueError: Invalid hashed_password salt

sphoenix 04.11.2018 13:24

@sphoenix Нет, согласно pypi.org/project/bcrypt, это должен быть pip install bcrypt. Однако я не пробовал с тех пор, как установил его с помощью anaconda. Странно, что вы получаете такую ​​ошибку. Он отлично работает для меня. Какую версию python и какие версии bcrypt (bcrypt.__version__) вы используете?

JohanL 04.11.2018 14:03

@sphoenix А что вы имеете в виду под "hashed статичен"? Это объект bytes, скорее всего, вы получите его, просмотрев значение с именем пользователя в качестве ключа.

JohanL 04.11.2018 14:11
python 3.5.2, bcrypt: 3.1.4
sphoenix 04.11.2018 14:15

@sphoenix И вы получаете эту ошибку, когда копируете и вставляете код, который я предоставил? Это странно, поскольку в моей системе он, кажется, работает так же, как и должен. Однако, поскольку мы не знаем первоначального пароля, трудно увидеть, правильно ли он вычислен.

JohanL 04.11.2018 14:19

Да, я скопировал и вставил и получил ошибку! Странный!

sphoenix 04.11.2018 14:20

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

sphoenix 04.11.2018 14:22

@sphoenix У каждого пользователя, скорее всего, будет только один пароль, поэтому обычно вы храните каждый хешированный пароль в таблице поиска и используете имя пользователя (или другой тип идентификации, например, адрес электронной почты) в качестве ключа к таблице. То есть, когда вы знаете, какой пользователь хочет войти в систему, у вас будет только один пароль для проверки.

JohanL 04.11.2018 14:44

Другие вопросы по теме