2013-09-30 2 views
6

Как я могу вручную генерировать пароль для django? Например, в другом приложении, но используя те же базу данных как Джанго .Для имени пользователя «администратор» пароль, как этогогенератор паролей python для django

pbkdf2_sha256$10000$T0BzrDwfZSrI$pSgvDEam9V9jcdYpYDVkYMMwtSnRrFdf6Aqow82Tjr8= 

ответ

10

Я думаю, что это может быть то, что вы ищете:

Manually managing a user’s password

make_password (пароль [, соль, hashers])

Создает хэш пароля в формат, используемый по этому приложению. Требуется один обязательный аргумент: пароль в текстовом формате. При желании вы можете предоставить соль и алгоритм хеширования , если вы не хотите использовать значения по умолчанию (первая запись в настройках PASSWORD_HASHERS). В настоящее время поддерживаются алгоритмы : 'pbkdf2_sha256', 'pbkdf2_sha1', 'bcrypt_sha256' (см. Использование bcrypt с Django), 'bcrypt', 'sha1', 'md5', 'unsalted_md5' (только для обратной совместимости) и ' crypt ", если у вас установлена ​​библиотека склепа . Если аргументом пароля является None, неприменимый пароль возвращает (тот, который не будет принят check_password()).


Я хочу функцию писать для использования без Джанго

Ну, к счастью, Django является открытым исходным кодом, так что вы можете пойти и взять то, что вам нужно. The functions source is visible here.

+0

спасибо, но эти методы используются с приложением django. Я хочу, чтобы функция записи использовалась без django, что-то вроде этого: http://stackoverflow.com/questions/1306550/calculating-a-sha-hash-with-a-string-secret-key-in-python – saniaxxx26

3

Наиболее распространенный (не самый безопасный) алгоритм для хеширования - md5. Распаковка несколько идей от системы паролей Django может быть этот кодом:

import hashlib 

def make_password(password): 
    assert password 
    hash = hashlib.md5(password).hexdigest() 
    return hash 

def check_password(hash, password): 
    """Generates the hash for a password and compares it.""" 
    generated_hash = make_password(password) 
    return hash == generated_hash 


>>> hash = make_password('hello123') 
>>> hash 
'f30aa7a662c728b7407c54ae6bfd27d1' 
>>> check_password(hash, 'hello123') 
True 
>>> check_password(hash, 'Hello123') 
False 

Использование make_password для генерации хэша и check_password, чтобы проверить, если введенный пароль совпадает с сохраненными один.

Как @Emil указывал, Джанго поддерживает несколько hashers паролей, такие как pbkdf2_sha256 и pbkdf2_sha1, сохраняя строку в качестве 3-кратного значения, разделенные $: algorithm$salt$hash. salt - это случайная сгенерированная строка, которая предотвращает повторение повторяющегося пароля в базе данных.

Смежные вопросы