如何手动为 django 生成密码?例如,在其他应用程序中,但使用与 django 相同的数据库。对于用户名 'admin' 密码这样
pbkdf2_sha256$10000$T0BzrDwfZSrI$pSgvDEam9V9jcdYpYDVkYMMwtSnRrFdf6Aqow82Tjr8=
我认为这可能是您正在寻找的:
make_password(密码[, salt, hashers])
以该应用程序使用的格式创建一个散列密码。它需要一个强制性参数:纯文本密码。或者,如果您不想使用默认值(PASSWORD_HASHERS 设置的第一个条目),您可以提供要使用的盐和散列算法。当前支持的算法有:'pbkdf2_sha256'、'pbkdf2_sha1'、'bcrypt_sha256'(参见 Using bcrypt with Django)、'bcrypt'、'sha1'、'md5'、'unsalted_md5'(仅用于向后兼容)和 'crypt' if你已经安装了 crypt 库。如果密码参数为无,则返回不可用的密码(check_password() 永远不会接受的密码)。
我想编写不使用 django 的函数
幸运的是 Django 是开源的,所以你可以去拿你需要的东西。函数源在此处可见。
最常见(不是最安全)的散列算法是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
是一个随机生成的字符串,用于防止相同的密码在数据库中重复。