Django - проверить, совпадают ли два хэша пароля с одним необработанным паролем - PullRequest
1 голос
/ 11 марта 2020

Я хочу отслеживать историю смены пароля пользователя и отображать предупреждение, если ранее использовался их текущий пароль. Отметим, что я не хочу запрещать пользователю устанавливать пароль, если он использовался ранее, я хочу позволить ему установить пароль, но потом просто отображать предупреждение. Поэтому я не проверяю пароль.

Я знаю, что, хотя Django сохраняет пароли пользователей в БД, он создает ха sh пароля с использованием случайной соли. Таким образом, 2 хэша одного и того же пароля не будут одинаковыми. Тем не менее, можно ли определить, созданы ли 2 разных хэша паролей с тем же необработанным паролем, что и для ввода?

Ответы [ 2 ]

3 голосов
/ 11 марта 2020

Если у вас нет доступа к открытому текстовому паролю, и все, что у вас есть, - это хэши, вы не можете сравнивать их. Это сделано специально для того, чтобы сделать пароли необратимыми, особенно для целых баз данных. Возможно, вам удастся взломать один пароль, если у вас достаточно времени и вычислительных мощностей, но вы не можете применить эти знания к любым другим хешам, поэтому перебор всей их базы данных непомерно дорог.

Вы может делать такие сравнения во время регистрации, входа в систему или сброса пароля, когда пользователь ввел свой простой пароль. В этот момент вам просто нужно иметь sh пароль с солью существующего (ых) и затем сравнить хэши.

1 голос
/ 11 марта 2020

Не знаю, правильно я понял вашу ситуацию или нет. Вот решение, основанное на том, что я понял из вашего вопроса. Вы можете сравнить новый пароль с паролем, который уже используется, используя метод check_password (), который связан с моделью пользователя в Django.

 @api_view(['POST'])
 def some_function(request):
    new_password = request.data.get('password')
    # get the user from the request
    user_object = request.user
    if user_object.check_password(new_password):
       # check_password() will hash the new_password in the same way how it hashed the password which is already stored in the db and it will compare the new_password with that password.
       print("Both the passwords are same")
    else:
       print("Passwords are not same")

Если запрос не аутентифицирован, то он не возможно получить пользователя из запроса. В этом случае этот код не будет работать.

Надеюсь, он даст решение вашей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...