Почему этот скрипт хэширования 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 выходная строка выглядит случайной, но возможность проверки пароля сохраняется.

Другие вопросы по тегам