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 相关文章推荐
浅析Python的Django框架中的Memcached
Jul 23 Python
Python实现简单的四则运算计算器
Nov 02 Python
Python实现的异步代理爬虫及代理池
Mar 17 Python
Python内置模块logging用法实例分析
Feb 12 Python
python实现数据写入excel表格
Mar 25 Python
python和shell获取文本内容的方法
Jun 05 Python
Python OpenCV处理图像之图像像素点操作
Jul 10 Python
opencv python 图像去噪的实现方法
Aug 31 Python
Python设计模式之职责链模式原理与用法实例分析
Jan 11 Python
Python关于__name__属性的含义和作用详解
Feb 19 Python
python 爬取腾讯视频评论的实现步骤
Feb 18 Python
opencv实现图像几何变换
Mar 24 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
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
ThinkPHP之getField详解
2014/06/20 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
PHP支付系统设计与典型案例分享
2016/08/02 PHP
PHP生成加减算法方式的验证码实例
2018/03/12 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
2018/10/16 PHP
jquery淡化版banner异步图片文字效果切换图片特效
2014/04/08 Javascript
js性能优化技巧
2015/11/29 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
2016/02/02 Javascript
js替换字符串中所有指定的字符(实现代码)
2016/08/17 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
bootstrap table 多选框分页保留示例代码
2017/03/08 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
浅谈node.js 命令行工具(cli)
2018/05/10 Javascript
js中的数组对象排序分析
2018/12/11 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
深入浅出vue图片路径的实现
2019/09/04 Javascript
JS实现容器模块左右拖动效果
2020/01/14 Javascript
基于JS实现table导出Excel并保留样式
2020/05/19 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
vue实现页面切换滑动效果
2020/06/29 Javascript
[04:52]第二届DOTA2亚洲邀请赛主赛事第一天比赛集锦:OG娜迦海妖放大配合谜团大中3人
2017/04/02 DOTA
Python类的基础入门知识
2008/11/24 Python
pytorch实现对输入超过三通道的数据进行训练
2020/01/15 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
企业治理工作自我评价
2013/09/26 职场文书
一名老师的自我评价
2014/02/07 职场文书
高中毕业自我评价
2014/02/08 职场文书
乡镇党的群众路线对照检查材料
2014/09/24 职场文书
机关作风建设整改方案
2014/10/27 职场文书
创业计划书介绍
2019/04/24 职场文书
Python anaconda安装库命令详解
2021/10/16 Python
python多次执行绘制条形图
2022/04/20 Python
vue/cli 配置动态代理无需重启服务的方法
2022/05/20 Vue.js