使用默认配置时,Django 会采用 PBKDF2 算法及 SHA256 摘要算法,迭代 150000 次(Django 2.2)来生成密码:
- 生成一个密码学安全的随机字符串作为盐
- 使用 PBKDF2 算法,将密码原文、盐及迭代次数(默认 150000 次)作为参数,并以 SHA256 为摘要算法,生成一串 hash 值
- 以
"%s$%d$%s$%s" % (self.algorithm, iterations, salt, hash)
形式将密码保存至数据库(默认auth_user
表)
代码入口在 django.contrib.auth.base_user.AbstractBaseUser.set_password
。