Почему этот скрипт хэширования passlib создает новый результат каждый раз, когда я запускаю скрипт?
Я использую следующий скрипт из документации passlib для хэширования пароля:
# import the hash algorithm
from passlib.hash import sha256_crypt
# generate new salt, and hash a password
hash = sha256_crypt.encrypt("toomanysecrets")
print hash # <== WHY IS THIS ALWAYS A DIFFERENT STRING?
# verifying the password
print sha256_crypt.verify("toomanysecrets", hash) # Outputs "True"
print sha256_crypt.verify("joshua", hash) # Outputs "False"
Кажется странным, что sha256_crypt.verify
сможет проверить несколько различных хэшей как "toomanysecrets" - почему для этого пароля не существует только одного хэша?
1 ответ
Решение
Результат хеширования зависит от ввода и соли. Где соль - это случайно сгенерированное значение, которое включается в выходную строку вместе с результатом хеширования. Именно поэтому для каждого вызова sha256_crypt.encrypt выходная строка выглядит случайной, но возможность проверки пароля сохраняется.