PHP Bcrypt переместится на Python3

Вопрос:

Мне нужно перенести оригинальную проверку подлинности php на python3. У меня такой код:

// hash from db
$hash = "$2y$14$00sMXcXPyTthEv9m5dszwuT8VUU6KK1HtCunemfutphrbCHZoIz0e";

// the hash is used as salt
$result = crypt($password, $hash);

//result should match the hash if pasword is correct
$result = "$2y$14$00sMXcXPyTthEv9m5dszwuT8VUU6KK1HtCunemfutphrbCHZoIz0e";

Это делается с параметром cost = 14

Какая лучшая библиотека для реализации в python3?

EDITED: Я использовал lib py-bcrypt.

>>> import bcrypt
>>> password = "ahoj"
>>> db_hash = "$2y$14$00sMXcXPyTthEv9m5dszwuT8VUU6KK1HtCunemfutphrbCHZoIz0e"
>>> computed_hash = bcrypt.hashpw(password, db_hash)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Invalid salt

Почему соль недействительна?

В PHP он работает:

password=ahoj
hash=$2y$14$00sMXcXPyTthEv9m5dszwuT8VUU6KK1HtCunemfutphrbCHZoIz0e
result=$2y$14$00sMXcXPyTthEv9m5dszwuT8VUU6KK1HtCunemfutphrbCHZoIz0e

Что в питоне отличается?

Лучший ответ:

Если вы хотите сравнить пароли, используйте функцию checkpw вместо hashpw:

if bcrypt.checkpw(passsword, db_hash):
    print "It matches"
else:
    print "It does not match"

Соль нужна только тогда, когда вы создаете новый хеш:

hashed = bcrypt.hashpw(password, bcrypt.gensalt())

Более подробную информацию вы можете найти в файле README.

Оцените статью
TechArks.Ru
Добавить комментарий