Мне нужно перенести оригинальную проверку подлинности 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.