дбр сказал:
def hash_password(password):
"""Returns the hashed version of a string
"""
return hasher.new( str(password) ).hexdigest()
Это действительно небезопасный способ хэширования паролей. Вы не хотите сделать это. Если вы хотите узнать, зачем читали Bycrypt Paper от тех, кто занимался системой хеширования паролей для OpenBSD. Кроме того, если вы хотите получить хорошую дискуссию о том, как пароли взломаны, прочитайте это интервью с автором Джека Потрошителя (популярного взломщика паролей Unix).
Теперь B-Crypt великолепен, но я должен признать, что я не использую эту систему, потому что у меня не было доступного алгоритма EKS-Blowfish, и я не хотел реализовывать его самостоятельно. Я использую слегка обновленную версию системы FreeBSD, которую я опубликую ниже. Суть в этом. Не просто хэшируйте пароль. Соль пароль, затем хэш-пароль и повторите примерно 10000 раз.
Если это не имеет смысла, вот код:
#note I am using the Python Cryptography Toolkit
from Crypto.Hash import SHA256
HASH_REPS = 50000
def __saltedhash(string, salt):
sha256 = SHA256.new()
sha256.update(string)
sha256.update(salt)
for x in xrange(HASH_REPS):
sha256.update(sha256.digest())
if x % 10: sha256.update(salt)
return sha256
def saltedhash_bin(string, salt):
"""returns the hash in binary format"""
return __saltedhash(string, salt).digest()
def saltedhash_hex(string, salt):
"""returns the hash in hex format"""
return __saltedhash(string, salt).hexdigest()
Для развертывания такой системы ключевым моментом является постоянная HASH_REPS. Это масштабируемый фактор стоимости в этой системе. Вам нужно будет выполнить тестирование, чтобы определить, сколько времени вы хотите ожидать для вычисления каждого хэша, в сравнении с риском атаки в автономном словаре на ваш файл паролей.
Безопасность трудна, и метод, который я представляю, не лучший способ сделать это, но он значительно лучше простого хэша. Кроме того, он очень прост в реализации. Таким образом, даже если вы не выберете более сложное решение, это не самое худшее.
надеюсь, это поможет,
Тим