Django密码系统实现过程详解


Posted in Python onJuly 19, 2019

一、Django密码存储和加密方式

#算法+迭代+盐+加密

<algorithm>$<iterations>$<salt>$<hash>

默认加密方式配置

#settings里的默认配置
PASSWORD_HASHERS = [
  'django.contrib.auth.hashers.PBKDF2PasswordHasher',
  'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
  'django.contrib.auth.hashers.Argon2PasswordHasher',
  'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
  'django.contrib.auth.hashers.BCryptPasswordHasher',
]

#PASSWORD_HASHERS[0]为正在使用的加密存储方式,其他为检验密码时,可以使用的方式

默认加密方式配置

所有支持的hasher

[
  'django.contrib.auth.hashers.PBKDF2PasswordHasher',
  'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
  'django.contrib.auth.hashers.Argon2PasswordHasher',
  'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
  'django.contrib.auth.hashers.BCryptPasswordHasher',
  'django.contrib.auth.hashers.SHA1PasswordHasher',
  'django.contrib.auth.hashers.MD5PasswordHasher',
  'django.contrib.auth.hashers.UnsaltedSHA1PasswordHasher',
  'django.contrib.auth.hashers.UnsaltedMD5PasswordHasher',
  'django.contrib.auth.hashers.CryptPasswordHasher',
]

所有支持的hasher

二、手动校验密码

#和数据库的密码进行校验
check_password(password, encoded)

#手动生成加密的密码,如果password=None,则生成的密码永远无法被check_password()
make_password(password, salt=None, hasher='default')

#检查密码是否可被check_password()
is_password_usable(encoded_password)

三、密码格式验证

AUTH_PASSWORD_VALIDATORS = [

#检验和用户信息的相似度
  {
    'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
  },

#校验密码最小长度
  {
    'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    'OPTIONS': {
      'min_length': 9,
    }
  },

#校验是否为过于简单(容易猜)密码
  {
    'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
  },

#校验是否为纯数字
  {
    'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
  },
]

四、自定义

  • 自定义hash算法
  • 对已有hash算法升级
  • 自定义密码格式验证

官方原文

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
教你如何在Django 1.6中正确使用 Signal
Jun 22 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
Apr 11 Python
Python简单读取json文件功能示例
Nov 30 Python
Python 查看list中是否含有某元素的方法
Jun 27 Python
Python分割指定页数的pdf文件方法
Oct 26 Python
python实现简易动态时钟
Nov 19 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
May 10 Python
Python hashlib加密模块常用方法解析
Dec 18 Python
Jupyter Notebook打开任意文件夹操作
Apr 14 Python
Python pytesseract验证码识别库用法解析
Jun 29 Python
Python实现文件压缩和解压的示例代码
Aug 12 Python
python opencv通过按键采集图片源码
May 20 Python
Tensorflow实现酸奶销量预测分析
Jul 19 #Python
Python实现基于SVM的分类器的方法
Jul 19 #Python
Tensorflow模型实现预测或识别单张图片
Jul 19 #Python
python django下载大的csv文件实现方法分析
Jul 19 #Python
python使用flask与js进行前后台交互的例子
Jul 19 #Python
Django 模型类(models.py)的定义详解
Jul 19 #Python
Tensorflow实现神经网络拟合线性回归
Jul 19 #Python
You might like
php计算年龄精准到年月日
2015/11/17 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
Javascript 类型转换方法
2010/10/24 Javascript
javascript与jquery中跳出循环的区别总结
2013/11/04 Javascript
jQuery性能优化的38个建议
2014/03/04 Javascript
js实现的点击数量加一可操作数据库
2014/05/09 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
js显示当前日期时间和星期几
2015/10/22 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
2015/11/07 Javascript
JavaScript File分段上传
2016/03/10 Javascript
vuejs父子组件通信的问题
2017/01/11 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
深入理解Vue transition源码分析
2017/07/30 Javascript
详解vue axios二次封装
2018/07/22 Javascript
Vue axios设置访问基础路径方法
2018/09/19 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
一个基于flask的web应用诞生 记录用户账户登录状态(6)
2017/04/11 Python
Python实现简单的HttpServer服务器示例
2017/09/25 Python
Python程序运行原理图文解析
2018/02/10 Python
TensorFlow Session使用的两种方法小结
2018/07/30 Python
PyTorch之图像和Tensor填充的实例
2019/08/18 Python
基于python读取.mat文件并取出信息
2019/12/16 Python
SpringBoot实现登录注册常见问题解决方案
2020/03/04 Python
python中PyQuery库用法分享
2021/01/15 Python
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
UNIX特点都有哪些
2016/04/05 面试题
三下乡活动方案
2014/01/31 职场文书
护理专科毕业自荐信范文
2014/04/21 职场文书
竞选副班长演讲稿
2014/04/24 职场文书
大四学生个人总结
2015/02/15 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
Spring Boot接口定义和全局异常统一处理
2022/04/20 Java/Android