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 图片验证码代码
Dec 07 Python
python中sets模块的用法实例
Sep 30 Python
详解Python中的变量及其命名和打印
Mar 11 Python
深入理解Python中的内置常量
May 20 Python
Python科学画图代码分享
Nov 29 Python
python 请求服务器的实现代码(http请求和https请求)
May 25 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
Jun 11 Python
python实现淘宝购物系统
Oct 25 Python
Python ORM编程基础示例
Feb 02 Python
什么是python的函数体
Jun 19 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
Oct 27 Python
详解Python GUI编程之PyQt5入门到实战
Dec 10 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&amp;mysql 日期操作小记
2012/02/27 PHP
php中使用redis队列操作实例代码
2013/02/07 PHP
PHP-FPM运行状态的实时查看及监控详解
2016/11/18 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
JavaScript日历实现代码
2010/09/12 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
基于jQuery实现美观且实用的倒计时实例代码
2015/12/30 Javascript
全面了解JS中的匿名函数
2016/06/29 Javascript
JSONP跨域请求实例详解
2016/07/04 Javascript
Javascript 实现计算器时间功能详解及实例(二)
2017/01/08 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
在Vue中如何使用Cookie操作实例
2017/07/27 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
2018/05/15 Javascript
浅析vue 函数配置项watch及函数 $watch 源码分享
2018/11/22 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
[04:21]狐狸妈带你到现场 DOTA2 TI中国区预选赛线下赛路线指引
2014/05/22 DOTA
Python的Django框架中的select_related函数对QuerySet 查询的优化
2015/04/01 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
2018/07/27 Python
使用Scrapy爬取动态数据
2018/10/21 Python
在win64上使用bypy进行百度网盘文件上传功能
2020/01/02 Python
美国最大婚纱连锁店运营商:David’s Bridal
2019/03/12 全球购物
道路建设实施方案
2014/03/18 职场文书
贷款担保申请书
2014/05/20 职场文书
考生诚信考试承诺书
2014/05/23 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
房屋出租委托书格式
2014/09/23 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
事业单位年度考核评语
2014/12/31 职场文书
五四青年节活动总结
2015/02/10 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python
python爬虫之selenium库的安装及使用教程
2021/05/23 Python
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python