Django密码处理:加密、验证与安全机制解析
本文详解Django内置的django.contrib.auth.hashers模块,重点解析make_password函数的三种调用方式及其对哈希结果的影响,包括随机盐值与固定盐值的区别。同时介绍check_password的验证逻辑及authenticate接口的密文要求,强调Django密码不可逆特性及最佳实践。
Django内置加解密模块概述
首先简要介绍本文涉及的Django内置加解密工具包。
from django.contrib.auth.hashers import make_password
如上图所示,django.contrib.auth.hashers即为Django框架内置的加解密模块。
小提示:
PyCham中的Python Console(如下图所示)可以执行Django相关语句,其功能类似于Python解释器。

密码加密机制:make_password详解
1. 加密处理
核心语句:make_password(原始密码[, 固定字串][, 加密方式])
返回值:加密后的密码字符串
当调用 make_password(原始密码) 或 make_password(原始密码,None) 或 make_password(原始密码,'') 时,每次生成的加密密码均不相同,因为系统会自动生成随机盐值。
>>> from django.contrib.auth.hashers import make_password
>>> make_password('a')
'pbkdf2_sha256$120000$m7gXe6yy0hJd$4ML8hHFQMrGyAXXkJpz9C4MOu8RJ6IvH19fpJaSVz0c='
>>> make_password('a')
'pbkdf2_sha256$120000$uD5csLIeBqWR$HvvTnZsUmATa+KBSCzRbRR5tYNaBab7VWpk2O4NfURU='
>>> make_password('a',None)
'pbkdf2_sha256$120000$SG5CBgULfUew$alE84q7NAzkraQ2Gr1J61pPU6gXLlvCwA2E5H3d75cQ='
>>> make_password('a',None)
'pbkdf2_sha256$120000$Kcq2i6cFokS0$tAaRf6CAFwaqmg9QDHFefTkzCusla2JqU+FKMkjiilk='
>>> make_password('a','')
'pbkdf2_sha256$120000$qBmkLhQTZX8B$pXZ3PZkiPH3fBGjUQt+SsGFpYhIn3BHgACmE5bDdTK0='
>>> make_password('a','')
'pbkdf2_sha256$120000$QR3QAh7MCF15$nAQVTKHEFks92NPmLY2S3odHeT7PoaFoIL7/etKs08w='
make_password(原始密码,固定字串):产生相同密码。
>>> from django.contrib.auth.hashers import make_password
>>> make_password('a','a')
'pbkdf2_sha256$120000$a$l8oCmo99z83LSu7DX4AGnjHHpeVmecW3puc4ufA55mE='
>>> make_password('a','a')
'pbkdf2_sha256$120000$a$l8oCmo99z83LSu7DX4AGnjHHpeVmecW3puc4ufA55mE='
>>> make_password('a','abcd')
'pbkdf2_sha256$120000$abcd$JmTnyyEmsg4YsssiJU4yi0RDAvvJEnqjJOCTounGDc0='
>>> make_password('a','abcd')
'pbkdf2_sha256$120000$abcd$JmTnyyEmsg4YsssiJU4yi0RDAvvJEnqjJOCTounGDc0='
make_password(原始密码,固定字串,加密方式)
>>> from django.contrib.auth.hashers import make_password
>>> make_password('a','ab','pbkdf2_sha256')
'pbkdf2_sha256$120000$ab$KjztZyslBdOqErZyWGtDdB0FhGA/vx4CfL0dFDKbGzI='
具体使用示例如下:
from django.contrib.auth.hashers import make_password
class AddView(View):
def get(self, request):
return render(request, "user/add.html")
def post(self, request):
username = request.POST.get('username')
password = request.POST.get('password')
.......
#密码加密
password=make_password(password)
密码验证与登录处理
2. 验证密码
核心语句:check_password(原始密码, 加密后的密码)
return True/False
值得注意的是,如果数据库中存储的是未加密的原始密码,则无需进行加密处理,直接比对数据库中的原始密码即可。
另一种验证登录密码的方式是使用 authenticate(username=username, password=password),但需注意,此处的password参数必须是密文,不能传入原始明文密码。
密码不可逆性与总结
3. 关于解密
总结
以上内容介绍了Django中密码的加密、验密及解密相关操作,希望能为读者提供帮助。如有任何疑问,欢迎留言,小编会及时回复。在此非常感谢大家对本站的支持! 如果觉得本文对您有帮助,欢迎转载,烦请注明出处,谢谢!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









