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 相关文章推荐
python2.7删除文件夹和删除文件代码实例
Dec 18 Python
浅析使用Python操作文件
Jul 31 Python
django定期执行任务(实例讲解)
Nov 03 Python
Python遍历pandas数据方法总结
Feb 09 Python
Python创建普通菜单示例【基于win32ui模块】
May 09 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
Oct 31 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
Jul 22 Python
python实现录屏功能(亲测好用)
Mar 02 Python
django xadmin action兼容自定义model权限教程
Mar 30 Python
Python 字典中的所有方法及用法
Jun 10 Python
python判断all函数输出结果是否为true的方法
Dec 03 Python
Python基本数据类型之字符串str
Jul 21 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
输出控制类
2006/10/09 PHP
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
PHP简单字符串过滤方法示例
2016/09/04 PHP
js弹出层之1:JQuery.Boxy (二)
2011/10/06 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
2014/02/13 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
打造自己的jQuery插件入门教程
2016/09/23 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
jQuery树控件zTree使用方法详解(一)
2017/02/28 Javascript
深入理解Vue 的条件渲染和列表渲染
2017/09/01 Javascript
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
React 无状态组件(Stateless Component) 与高阶组件
2018/08/14 Javascript
详解js删除数组中的指定元素
2018/10/31 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
2020/11/05 Javascript
精确查找PHP WEBSHELL木马的方法(1)
2011/04/12 Python
Python实现的下载8000首儿歌的代码分享
2014/11/21 Python
python+pyqt实现右下角弹出框
2017/10/26 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
对web.py设置favicon.ico的方法详解
2018/12/04 Python
简单了解python的内存管理机制
2019/07/08 Python
python变量的作用域是什么
2020/05/26 Python
利用python绘制正态分布曲线
2021/01/04 Python
CSS3贝塞尔曲线示例:创建链接悬停动画效果
2020/11/19 HTML / CSS
10条PHP编程习惯
2014/05/26 面试题
银行自荐信范文
2013/10/07 职场文书
房产销售经理职责
2013/12/20 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
实习护士自荐信
2014/06/21 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
《猴王出世》教学反思
2016/02/23 职场文书
Python使用pandas导入xlsx格式的excel文件内容操作代码
2022/12/24 Python