django 自定义 密码加密方式 及自定义验证方式
2017-02-17 15:08
357 查看
在django1.6中,默认的加密方式是pbkdf_sha256,具体算法不表,一直以来用django的自带用户验证都十分顺手,但如果需要修改默认加密方式为md5,具体方法为:
在settings.py中加入:
django会默认使用第一条加密方式。
这个是我自定义的加密方式,就是基本的md5,而django的MD5PasswordHasher是加盐的。
以下是我的自定义hashers.py:
然而仅仅修改这些,在配合django的authenticate验证时无法进行。
经过一些查找,发现需要在自定义authenticate。以下为方法:
在settings.py中加入以下:
以下代码为自定义的mybackend.py:
在settings.py中加入:
PASSWORD_HASHERS = ( 'myproject.hashers.MyMD5PasswordHasher', 'django.contrib.auth.hashers.MD5PasswordHasher', 'django.contrib.auth.hashers.PBKDF2PasswordHasher', 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', 'django.contrib.auth.hashers.BCryptSHA256PasswordHasher', 'django.contrib.auth.hashers.BCryptPasswordHasher', 'django.contrib.auth.hashers.SHA1PasswordHasher', 'django.contrib.auth.hashers.CryptPasswordHasher', )
django会默认使用第一条加密方式。
这个是我自定义的加密方式,就是基本的md5,而django的MD5PasswordHasher是加盐的。
以下是我的自定义hashers.py:
from django.contrib.auth.hashers import BasePasswordHasher,MD5PasswordHasher from django.contrib.auth.hashers import mask_hash import hashlib class MyMD5PasswordHasher(MD5PasswordHasher): algorithm = "mymd5" def encode(self, password, salt): assert password is not None hash = hashlib.md5(password).hexdigest().upper() return hash def verify(self, password, encoded): encoded_2 = self.encode(password, '') return encoded.upper() == encoded_2.upper() def safe_summary(self, encoded): return OrderedDict([ (_('algorithm'), algorithm), (_('salt'), ''), (_('hash'), mask_hash(hash)), ])
然而仅仅修改这些,在配合django的authenticate验证时无法进行。
经过一些查找,发现需要在自定义authenticate。以下为方法:
在settings.py中加入以下:
AUTHENTICATION_BACKENDS = ( 'chicken.mybackend.MyBackend', )
以下代码为自定义的mybackend.py:
import hashlib from pro import models class MyBackend(object): def authenticate(self, username=None, password=None): try: user = models.M_User.objects.get(username=username) print user except Exception: print 'no user' return None if hashlib.md5(password).hexdigest().upper() == user.password: return user return None def get_user(self, user_id): try: return models.M_User.objects.get(id=user_id) except Exception: return None
相关文章推荐
- Django 自带密码加密,自定密码加密方式 及自定义验证方式
- django 自定义 密码加密方式 及自定义验证方式
- 单点登录(十五)-----实战-----cas4.2.x登录mongodb验证方式实现自定义加密
- django项目培训站-17-用户登陆-自定义用户验证方式-错误提示信息传前端
- shiro自定义密码匹配验证,密码加密验证。
- django学习——用户注册时的密码加密及登陆时的密码验证问题
- django实现密码加密的注册(数据对象插入)-结合forms表单实现表单验证
- 单点登录(十五)-----实战-----cas4.2.x登录mongodb验证方式实现自定义加密
- Cas单点登录(5)数据库验证用户之自定义密码加密
- Joomla登录验证,密码加密方式
- DNN中自定义密码验证
- WCF分布式安全开发实践(3):传输安全模式之自定义用户名密码身份验证
- Silverlight3系列(三)Silverlight+WCF的安全考虑1(紧接上文:Silverlight3+wcf+在不使用证书的情况下自定义用户名密码验证)
- Silverlight3系列(二)Silverlight3+wcf+在不使用证书的情况下自定义用户名密码验证
- 浙飞网站管理系统密码加密方式分析
- 取消windows XP用户密码验证登录方式 分类: 开发常见问题解决方案 2010-04-11 08:07 1107人阅读 评论(0) 收藏
- QuickCSharp框架开发(18)------加密用户名和密码数据与数据库读出的密码进行哈希比较(验证用户是否成功登录)
- WCF分布式安全开发实践(3):传输安全模式之自定义用户名密码身份验证:Transport_UserNamePassword_WSHttpBinding
- DNN中自定义密码验证
- WCF 安全之自定义的用户名/密码身份验证