如何为django手动生成密码?例如,在其他应用程序中,但使用与django相同的数据库。对于像这样的用户名'admin'密码
pbkdf2_sha256$10000$T0BzrDwfZSrI$pSgvDEam9V9jcdYpYDVkYMMwtSnRrFdf6Aqow82Tjr8=
答案 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$hash
。 salt
是一个随机生成的字符串,用于防止在数据库中重复使用相同的密码。