Основываясь на других ответах на этот вопрос, я реализовал новый подход с использованием bcrypt.
Зачем использовать bcrypt
Если я правильно понимаю, аргумент для использования bcrypt
вместо SHA512
заключается в том, что bcrypt
разработан, чтобы быть медленным. bcrypt
также имеет возможность настроить, насколько медленно вы хотите, чтобы при генерации хешированного пароля в первый раз:
# The '12' is the number that dictates the 'slowness'
bcrypt.hashpw(password, bcrypt.gensalt( 12 ))
Медленно желательно, потому что, если злоумышленник попадет в руки к таблице с хешированными паролями, их будет намного сложнее переборить.
Осуществление
def get_hashed_password(plain_text_password):
# Hash a password for the first time
# (Using bcrypt, the salt is saved into the hash itself)
return bcrypt.hashpw(plain_text_password, bcrypt.gensalt())
def check_password(plain_text_password, hashed_password):
# Check hashed password. Using bcrypt, the salt is saved into the hash itself
return bcrypt.checkpw(plain_text_password, hashed_password)
Примечания
Мне удалось довольно легко установить библиотеку в системе Linux, используя:
pip install py-bcrypt
Однако у меня возникли дополнительные проблемы при установке его на мои системы Windows. Похоже, нужен патч. См. Этот вопрос переполнения стека: установка py-bcrypt на win 7 64bit Python