前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自定义Django的密码策略

自定义Django的密码策略

作者头像
happy123.me
发布2018-06-04 10:04:30
1.6K0
发布2018-06-04 10:04:30
举报
文章被收录于专栏:乐享123

Django 从1.4 版本开始,包含了一些安全方面的重要提升。其中一个是使用 PBKDF2 密码加密算法代替了 SHA1 。另外一个特性是你可以添加自己的密码加密方法。

Django 会使用你提供的第一个密码加密方法(在你的 setting.py 文件里要至少有一个方法)

1 2 3 4 5 6 7 8

PASSWORD_HASHERS = ( 'django.contrib.auth.hashers.PBKDF2PasswordHasher', 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', 'django.contrib.auth.hashers.BCryptPasswordHasher', 'django.contrib.auth.hashers.SHA1PasswordHasher', # Insecure Hashes 'django.contrib.auth.hashers.MD5PasswordHasher', # Insecure Hashes 'django.contrib.auth.hashers.CryptPasswordHasher', # Insecure Hashes )

但Django默认生成的密码策略往往会带上 md5_xxx, pbkdf2_xxx,同其他系统整合的时候,一般是没有这些前缀的,这就需要我们自定义一个密码策略。

下面介绍下如何定义一个简单的 md5(md5(password, salt)) 密码策略。

step1

建立一个app,django-admin.py startapp ownmd5

step2

在 ownmd5中 建立 hashers.py 文件,加入 OwnMd5PasswordHasher 类

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

import hashlib from django.utils.translation import ugettext_noop as _ from django.utils.datastructures import SortedDict from django.utils.crypto import constant_time_compare from django.utils.encoding import force_bytes, force_str, force_text from django.contrib.auth.hashers import BasePasswordHasher, mask_hash class OwnMD5PasswordHasher(BasePasswordHasher): """ The Salted MD5 password hashing algorithm (not recommended) """ algorithm = "ownmd5" def encode(self, password, salt): assert password is not None assert salt and '$' not in salt hash = hashlib.md5(hashlib.md5(force_bytes(salt + password)).hexdigest()).hexdigest() return hash def verify(self, password, encoded, salt): encoded_2 = self.encode(password, salt) return constant_time_compare(encoded, encoded_2) def safe_summary(self, encoded, salt): return SortedDict([ (_('algorithm'), self.algorithm), (_('salt'), mask_hash(salt, show=4)), (_('hash'), mask_hash(hash)), ])

step3

将 OwnMD5PasswordHasher 加入到settings.py 中:

1 2 3

PASSWORD_HASHERS = ( 'ownmd5.hashers.OwnMD5PasswordHasher', )

这样,默认的user及auth模块都会采用自定义的md5算法。

参考:

https://docs.djangoproject.com/en/1.6/topics/auth/passwords/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • step1
  • step2
  • step3
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档