基于django的 md5加密
md5相关知识点(百度百科)
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。
1前提知识点
1.1.特点
1.长度固定:
不管多长的字符串,加密后长度都是一样长
作用:方便平时信息的统计和管理
2.易计算:
字符串和文件加密的过程是容易的.
作用: 开发者很容易理解和做出加密工具
3.不可逆性
你明明知道密文和加密方式,你却无法反向计算出原密码.
作用:基于这个特点,很多安全的加密方式都是用到.大大提高了数据的安全性
4、抗修改性:
即便修改一个字节,计算出来的MD5值也会巨大差异
5、抗碰撞性:
知道MD5值,很小概率找到相同MD5值相同的原数据
1.2关于撞库破解:
这是概率极低的破解方法,原理就是:
1.建立一个大型的数据库,把日常的各个语句,通过MD5加密成为密文,不断的积累大量的句子,放在一个庞大的数据库里.
2.比如一个人拿到了别人的密文,想去查询真实的密码,就需要那这个密文去到提供这个数据库的公司网站去查询.
这就是撞库的概念.
1.3关于MD5加盐:
比如我的银行密码是”12345”
1.得到的MD5是:827ccb0eea8a706c4c34a16891f84e7b
2.一个人截取到这个密文,那么通过撞库肯定容易撞出12345.
3.我们要做的就是加盐,银行密码还是”12345”,然后我把银行密码加上我特定的字符串才计算MD5 ,这样被撞库获得密码的可能性大大降低
2 实际操作
2.1在python中正常加盐方法
2.2在django中加盐方法
django在settings文件的 secret_key 中随机自动保存了一个字符串
基于自动保存的字符串,导入setting文件,避免手动加盐最后在其他py文件进行基于我们自定义的md5函数的调用
from django.conf import settings
import hashlib
def md5(data_string):
obj=hashlib.md5(settings.SECRET_KEY.encode("utf-8"))
obj.update(data_string.encode("utf-8"))
return obj.hexdigest()
from app01.utils.encrypt import md5
#字段返回什么 此字段(confirm_password)返回数据库的就是什么
return md5(pwd)