Я написал метод для хеширования паролей с помощью hashlib. Я разрешаю пользователю отправлять пароль с помощью метода POST, который принимается Flask, а затем пароль хэшируется, чтобы можно было проверить ha sh по сохраненной переменной, чтобы убедиться, что это то же самое.
Отлично работает как при отправке правильного, так и неправильного пароля в первый раз. Но если пользователь отправляет неверный пароль на первом POST, а затем пытается снова с правильным паролем, это не удается. (Можно было бы также подумать, что это не удалось, если первая попытка была успешной, а пользователь продолжает попытки, но сейчас мне все равно.)
Мне удалось сузить проблема до функции обновления hashlibs
ha sh .update (arg) Обновите объект ha sh с помощью строки arg. Повторные вызовы эквивалентны одному вызову с объединением всех аргументов: m.update (a); m.update (b) эквивалентен m.update (a + b).
Я хотел знать, как отключить объединение при повторных вызовах. Не имеет значения, если это хакерский обходной путь.
Вот мой код на случай, если он будет полезен:
h = hashlib.sha256()
VALID_USERNAME = 'admin'
VALID_PASSW_HASH = "210ce034be6d826a451a4261d70494148c5d7101627335ccacf8e00a711bcc5d"
@app.route('/api/queue/auth', methods=['POST'])
def auth():
username = request.json.get('username')
password = request.json.get('password')
if bool(username) is False or bool(password) is False:
return "\nPlease fill in both fields.\n", 400
passwordBytes = password.encode(encoding='UTF-8',errors='strict')
h.update(passwordBytes)
if h.hexdigest() != VALID_PASSW_HASH or username != VALID_USERNAME:
return "\nPlease check your username and password, and try again.\n", 401
r.set('auth', 'true')
return "Access Granted.\n", 200
Дополнительные примечания:
- the "r. set "(над последней) просто потому, что позже он что-то делает с Redis.
- я проверил, что passwordBytes всегда возвращает одну и ту же кодировку, когда предоставляется один и тот же пароль (это определено c)
- Я также проверил, что h.hexdigest () возвращает что-то другое, если тот же пароль предоставляется с первой попытки или с другой попытки. Таким образом, принимая во внимание эти два момента, мы можем быть уверены, что проблема заключается в h.update (), возможно, из-за возможности конкатенации.