Я должен принять меры безопасности для проекта курса, который я прохожу, и я столкнулся с чем-то, чего я не ожидал.
Прежде всего, я сохранил пароль:
########################## Password hashing ############################
# 1. Generate salt
salt = os.urandom(32)
salt = (binascii.hexlify(salt)).decode('utf-8')
# 2. Append salt to the password
password = data['password']
password = password + salt
# 3. Hash the password and storing
password = bcrypt.generate_password_hash(password).decode('utf-8')
output_msg = database_helper.save_new_user(data['email'], password, data['firstname'], data['familyname'], data['gender'], data['city'], data['country'], salt)
########################################################################
Это данные, которые сохраняются в базе данных:
salt2@salt.com|$2b$12$WJx.XLYk/8Zx4HdDnPqxK.0RiZ6QR8rQEpZrw7jBpJRFUZ2sfBWyW|salt2|sal|male|link |swe|b5e333e0bae505d4fae6d9b993bcdcfd6964e480ce4dc1b5fd6b13c034d23bb8
Для проверки пароля я делаю следующее:
########################### Password validation ############################
# 1. Retrive user's salt from the database
authentication_data = database_helper.get_users_salt(email)
# 2. Append salt to the inputed password and hash it
inputed_password = inputed_password + authentication_data['salt']
inputed_password = bcrypt.generate_password_hash(inputed_password).decode('utf-8')
# 3. Compare the hash generated from the inputed password with the one in
# the database
boolean_success = database_helper.check_user_password(email, inputed_password)
############################################################################
И получая соль из базы данных покажите в результате это, что я и сохранил:
b5e333e0bae505d4fae6d9b993bcdcfd6964e480ce4dc1b5fd6b13c034d23bb8
И хэширование inputed_password с солью показывает в результате это:
$2b$12$yEE.OX5IFyIXTK4x3XOBbO4Ospm2hcCz9FCmjzEn3tC5DNg9crtxy
В двух словах, почему показываются разные результаты хеширования?