Django 之更改密码加密类型

在 Django 1.5 之前,Django 对于用户密码的加密方式一直是 SHA1,存在数据库的样例如下:
sha1 1bb66 f6c9b132a39287884997412ec7b6c8a543c79a06

但在 Django 1.5 之后,密码的加密方式默认改为了 PBKDF2 算法与 SHA256 哈希值,存在数据库的样例如下:
pbkdf2_sha256 10000 RQPpfjqHFLPp$YJ70H2ZCCkgqs27I4yP0bx5L7Ve7pnHvNDKJVFhINsw=

很明显,下面的密码比上面的多了一个字段(迭代次数:10000),如果用户通过 Djang 1.5 登录,数据库中的密码会变成最新的加密方式(未验证,是通过发生的现象猜测的)。

处于某种特殊的原因,我们需要 1.2 版本和 1.5 版本共存,如果用户通过 1.5 登录后密码改变,再通过 1.2 登录,就会报 too many values to unpack ,查看报错信息不难发现是 django 1.2 通过 “$” 对新加密的密码做分隔所至,所以就需要更改 Django 1.5 的加密方式,使用户不论通过那个版本登录,密码的格式都是相同的。

尽管 Django 官方文档给出了如何更改加密方式,但由于 Django 建议非必要最好不要随意更改,一定要改只能借助 py-bcrypt 库,更改步骤如下:
1. 安装 py-bcrypt 库
2. 在settings.py 中添加

PASSWORD_HASHERS = (
   'django.contrib.auth.hashers.BCryptPasswordHasher',
   'django.contrib.auth.hashers.PBKDF2PasswordHasher', 
   'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', 
   'django.contrib.auth.hashers.SHA1PasswordHasher', 
   'django.contrib.auth.hashers.MD5PasswordHasher', 
   'django.contrib.auth.hashers.CryptPasswordHasher',
)

官方文档:https://docs.djangoproject.com/en/1.5/topics/auth/passwords/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值