django的python密码生成器

时间:2013-09-30 15:45:54

标签: python django

如何为django手动生成密码?例如,在其他应用程序中,但使用与django相同的数据库。对于像这样的用户名'admin'密码

pbkdf2_sha256$10000$T0BzrDwfZSrI$pSgvDEam9V9jcdYpYDVkYMMwtSnRrFdf6Aqow82Tjr8=

2 个答案:

答案 0 :(得分:12)

我想这也许就是你要找的东西:

Manually managing a user’s password

  

make_password(密码[,盐,哈希])

     

在中创建哈希密码   此应用程序使用的格式。它需要一个强制性参数:   明文密码。或者,您可以提供盐和盐   要使用的散列算法,如果您不想使用默认值(首先   输入PASSWORD_HASHERS设置)。目前支持的算法   是:'pbkdf2_sha256','pbkdf2_sha1','bcrypt_sha256'(参见使用bcrypt   与Django),'bcrypt','sha1','md5','unsalted_md5'(仅限于   向后兼容性)和'crypt',如果你有crypt库   安装。如果密码参数为None,则表示密码不可用   返回(一个将永远不会被check_password()接受的那个)。


  

我想在不使用django的情况下使用写入功能

幸运的是Django是开源的,所以你可以去拿你需要的东西。 The functions source is visible here

答案 1 :(得分: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所指出的,Django支持多个密码哈希,例如pbkdf2_sha256和pbkdf2_sha1,将字符串存储为由$分隔的3倍值:algorithm$salt$hashsalt是一个随机生成的字符串,用于防止在数据库中重复使用相同的密码。