Самый безопасный метод Python, чтобы сохранить и получить пароли от базы данных

Смотрение на имена пользователей хранилища и пароли в базе данных, и задается вопросом, какой самый безопасный способ сделать так. Я знаю, что должен использовать соль где-нибудь, но не уверено, как генерировать ее надежно или как применить ее для шифрования пароля. Некоторый демонстрационный код Python значительно ценился бы.Спасибо.

31
задан Magnus Hoff 7 April 2010 в 10:47
поделиться

2 ответа

Сохраните пароль + соль как хэш и соль. Посмотрите, как это делает Django: основные документы и исходный код . В базе данных они хранят <тип хэша> $ $ < hash> в единственном символьном поле. Вы также можете сохранить эти три части в отдельных полях.

Функция для установки пароля:

def set_password(self, raw_password):
    import random
    algo = 'sha1'
    salt = get_hexdigest(algo, str(random.random()), str(random.random()))[:5]
    hsh = get_hexdigest(algo, salt, raw_password)
    self.password = '%s$%s$%s' % (algo, salt, hsh)

get_hexdigest - это просто тонкая оболочка некоторых алгоритмов хеширования. Для этого вы можете использовать hashlib. Что-то вроде hashlib.sha1 ('% s% s'% (salt, hash)). Hexdigest ()

И функция для проверки пароля:

def check_password(raw_password, enc_password):
    """
    Returns a boolean of whether the raw_password was correct. Handles
    encryption formats behind the scenes.
    """
    algo, salt, hsh = enc_password.split('$')
    return hsh == get_hexdigest(algo, salt, raw_password)
38
ответ дан 27 November 2019 в 21:57
поделиться

Если у вас есть достаточный контроль над обеими конечными точками приложения, лучший способ - использовать PAK-Z + .

(Отредактировано: рекомендована исходная версия SRP , но PAK-Z + имеет доказательство безопасности.)

3
ответ дан 27 November 2019 в 21:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: