在 Django 1.5 之前,Django 对于用户密码的加密方式一直是 SHA1,存在数据库的样例如下:
sha1$1bb66$f6c9b132a39287884997412ec7b6c8a543c79a06
但在 Django 1.5 之后,密码的加密方式默认改为了 PBKDF2 算法与 SHA256 哈希值,存在数据库的样例如下:
pbkdf2_sha256$10000$RQPpfjqHFLPp$YJ70H2ZCCkgqs27I4yP0bx5L7Ve7pnHvNDKJVFhINsw=
通过django自带的类库,来加密解密很方便,下面来简单介绍下;
导入包:
from django.contrib.auth.hashers import make_password, check_password
从名字就可以看出来他们的作用了。
一个是生成密码,一个是核对密码。
注意:
[直接在python命令解释器导入会报错:
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
原因:
python启动方式python,会启动交互解释器,需要告诉Django使用哪个设置文件,Django会搜索DJANGO_SETTINGS_MODULE环境变量,它被设置在settings.py中,
需要设置为:multiDatabase.settings
解决方法:用python manage.py shell 来启动命令解释器而不是python,因为python manage.py shell中包含了Django使用哪个settings.py文件]
例如:
make_password("123456")
得到结果:
u'pbkdf2_sha25615000MAjic3nDGFoi$qbclz+peplspCbRF6uoPZZ42aJIIkMpGt6lQ+Iq8nfQ='
另外也可以通过参数来生成密码:
>>> make_password("123456", None, 'pbkdf2_sha256')
校验:
校验就是通过check_password(原始值, 生成的密文)来校验密码的。http://www.cnblogs.com/ccorz/p/Django-zhi-mi-ma-jia-mi.html
-
>>> check_password("123456","pbkdf2_sha25615000MAjic3nDGFoi$qbclz+peplspCbRF6uoPZZ42aJIIkMpGt6lQ+Iq8nfQ=")
-
True