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 相关文章推荐
用pywin32实现windows模拟鼠标及键盘动作
Apr 22 Python
python服务器与android客户端socket通信实例
Nov 12 Python
Python写的一个简单监控系统
Jun 19 Python
python+pyqt实现右下角弹出框
Oct 26 Python
对Python中DataFrame按照行遍历的方法
Apr 08 Python
Selenium定位元素操作示例
Aug 10 Python
Python获取好友地区分布及好友性别分布情况代码详解
Jul 10 Python
用Anaconda安装本地python包的方法及路径问题(图文)
Jul 16 Python
使用python turtle画高达
Jan 19 Python
PyQt5+Pycharm安装和配置图文教程详解
Mar 24 Python
python爬虫构建代理ip池抓取数据库的示例代码
Sep 22 Python
Python爬虫教程之利用正则表达式匹配网页内容
Dec 08 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常用Output和ptions/Info函数集介绍
2013/06/19 PHP
php unicode编码和字符串互转的方法
2020/08/12 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
PHP7 安装event扩展的实现方法
2019/10/08 PHP
jquery 回车事件实现代码
2011/08/23 Javascript
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
js string 转 int 注意的问题小结
2013/08/15 Javascript
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
取得元素的左和上偏移量的方法
2014/09/17 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
JS实现n秒后自动跳转的两种方法
2020/11/30 Javascript
JS创建对象的写法示例
2016/11/04 Javascript
hammer.js实现图片手势放大效果
2017/08/29 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
2018/08/30 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
[01:20]DOTA2 2017国际邀请赛冠军之路无止竞
2017/06/19 DOTA
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
Django项目中用JS实现加载子页面并传值的方法
2018/05/28 Python
python匿名函数的使用方法解析
2019/10/10 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
2020/06/28 Python
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
Stuarts London美国/加拿大:世界领先的独立男装零售商之一
2019/03/18 全球购物
高级Java程序员面试要点
2013/08/02 面试题
红领巾心向党广播稿
2014/01/19 职场文书
股份转让协议书
2014/04/12 职场文书
《画》教学反思
2014/04/14 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
2014年工程工作总结
2014/11/25 职场文书
2014年小学校长工作总结
2014/12/08 职场文书
2015年设计师个人工作总结
2015/04/25 职场文书
2015暑期社会实践通讯稿
2015/07/18 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
Python实现简单的俄罗斯方块游戏
2021/09/25 Python