在使用django的日常开发中,常用功能之一,密码加密
django常用各种算法sha, md5.... 都会加入salt
加入salt目的是防止查表破解
一、使用django默认的加密方法,即哈希算法
1、注册时加密
from django.contrib.auth.hashers import make_password
...
user.password = make_password(password) # 明文密码经过加密处理
user.save()
2、登录验证
系统验证
from django.contrib.auth import authenticate
user = authenticate(username=username, password=password)
手动验证
user.check_password(password)
二、自定义加密算法
1、md5算法
import hashlib
def calc_md5(password):
md5_obj = hashlib.md5()
md5_obj.update(password.encode('utf-8'))
return md5_obj.hexdigest()
2、sha1算法
import hashlib
def calc_sha1(password):
sha1_obj = hashlib.sha1()
sha1_obj.update(password.encode('utf-8'))
return sha1_obj.hexdigest()
3、 md5+salt(随机字符串)加密,防止查表法破解密码
import random
from hashlib import md5
# 获取由4位随机大小写字母、数字组成的salt值
def create_salt(length=4):
salt = ''
chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
len_chars = len(chars) - 1
for index in range(length):
salt += chars[random.randint(0, len_chars)]
return salt
获取原始密码+salt的md5值
def create_md5(pwd, salt):
md5_obj = md5()
pwd = pwd.encode('utf-8')
salt = salt.encode('utf-8')
md5_obj.update(pwd + salt)
return md5_obj.hexdigest()
网友评论