Django密码处理:加密、验证与安全机制解析

阿麦
阿麦
发布时间:2026-10-13 | 3人浏览过
原创

本文详解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中密码的加密、验密及解密相关操作,希望能为读者提供帮助。如有任何疑问,欢迎留言,小编会及时回复。在此非常感谢大家对本站的支持! 如果觉得本文对您有帮助,欢迎转载,烦请注明出处,谢谢!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表