我需要在Django中以编程方式创建数百个(可能是数千个)用户。我使用的是:
from django.contrib.auth.models import User
from django.contrib.auth.hashers import make_password
for username, email, pwd in big_user_list:
m = User(username=username, email=email, password=make_password(pwd))
m.save()
执行时间太长。我已经确认make_password是运行上面没有密码的脚本的罪魁祸首。
无论如何,这个慢速问题,我真的需要这个脚本快速执行。
答案 0 :(得分:15)
您可以使用django.contrib.auth.hashers.MD5PasswordHasher
作为初始密码。根据{{3}},
默认情况下,Django使用带有SHA256哈希的PBKDF2算法, NIST推荐的密码拉伸机制。这应该是 足以满足大多数用户:它非常安全,需要大量用户 计算破坏时间。
[...]
Django通过咨询PASSWORD_HASHERS来选择算法 设置。这是这个Django的散列算法类列表 安装支持。 此列表中的第一个条目(即, settings.PASSWORD_HASHERS [0])将 [默认] 用于存储密码,所有 其他条目是可用于检查现有的有效哈希 密码。 [...]
PASSWORD_HASHERS的默认值为:
PASSWORD_HASHERS = ( 'django.contrib.auth.hashers.PBKDF2PasswordHasher', 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', 'django.contrib.auth.hashers.BCryptPasswordHasher', 'django.contrib.auth.hashers.SHA1PasswordHasher', 'django.contrib.auth.hashers.MD5PasswordHasher', 'django.contrib.auth.hashers.CryptPasswordHasher' )
因此,您希望保持现在的默认值,但在开头使用较弱的哈希;确保列表中存在MD5PasswordHasher
。然后使用
make_password(pwd, None, 'md5')
最初生成普通的盐渍MD5密码;如果初始密码足够随机,这不会太弱。当用户更改密码时,他们的密码将使用更强大的算法进行加密。