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实现斐波那契递归函数的方法
Sep 08 Python
浅析Python编写函数装饰器
Mar 18 Python
linux环境下python中MySQLdb模块的安装方法
Jun 16 Python
python模块之paramiko实例代码
Jan 31 Python
python顺序的读取文件夹下名称有序的文件方法
Jul 11 Python
Python增强赋值和共享引用注意事项小结
May 28 Python
python 并发编程 非阻塞IO模型原理解析
Aug 20 Python
解决Pytorch 加载训练好的模型 遇到的error问题
Jan 10 Python
解决Python在导入文件时的FileNotFoundError问题
Apr 10 Python
解决阿里云邮件发送不能使用25端口问题
Aug 07 Python
Python命令行参数定义及需要注意的地方
Nov 30 Python
pandas 操作 Excel操作总结
Mar 31 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 fsockopen解决办法 php实现多线程
2014/01/20 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
PHP中使用循环实现的金字塔图形
2014/11/08 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
Yii2框架控制器、路由、Url生成操作示例
2019/05/27 PHP
用javascript来实现动画导航效果的代码
2007/12/16 Javascript
Javascript 倒计时源代码.(时.分.秒) 详细注释版
2011/05/09 Javascript
js点击事件链接的问题解决
2014/04/25 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结
2016/03/16 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
2016/10/21 Javascript
AngularJs 禁止模板缓存的方法
2017/11/28 Javascript
vue获取当前激活路由的方法
2018/03/17 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
Python读取环境变量的方法和自定义类分享
2014/11/22 Python
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
Pyinstaller将py打包成exe的实例
2018/03/31 Python
Django添加sitemap的方法示例
2018/08/06 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
2020/04/17 Python
Html5饼图绘制实现统计图的方法
2020/08/05 HTML / CSS
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
俄罗斯女装店:12storeez
2019/10/25 全球购物
金融专业个人求职信范文
2013/11/28 职场文书
农林环境专业求职信
2014/03/13 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
银行员工犯错检讨书
2014/09/16 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
运动会观后感
2015/06/09 职场文书
焦点访谈观后感
2015/06/11 职场文书
《女娲补天》读后感5篇
2019/12/31 职场文书
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL
Mysql表数据比较大情况下修改添加字段的方法实例
2022/06/28 MySQL