md5加密

加密

1.散列加密

散列函数是一种不可逆的加密算法,即无法解密;MD5默认生成32位的密文;

2. python使用MD5加密

import hashlib
# 实例化对象
obj=hashlib.md5()
# 加密
obj.update("admin".encode("utf-8"))#加密的时候必须是字节
# 获取密文
v=obj.hexdigest()
print(v)

image-20211130101000485

3.撞库

  • 将上面产生的密文在网站上进行解密测试,发现被解析出原文;因为MD5算法产生的值唯一;因此可能存在对应的密文字典;通过查询可以解析到结果,发生撞库现象;

  • image-20211130101304442

4.加盐

  • 为了解决上述问题,使用MD5的加盐功能

    import hashlib
    # 实例化对象
    obj=hashlib.md5(b'ssdgsdfhhdfgdf')
    # 加密
    obj.update("admin".encode("utf-8"))#加密的时候必须是字节
    # 获取密文
    v=obj.hexdigest()
    print(v)
    # 21232f297a57a5a743894a0e4a801fc3
    # 27caf5f79691c06900114ff867b98309
    

    image-20211130101824236

  • 进行解密测试

    image-20211130101923477

    解密失败,无法解析出对应的值

5.编写对应的加密函数

  • 编写好函数方便后期的调用与使用
  • 应用场景
    • 一般在数据库中存储的密码存储为密文的形式,因此在数据库设计的时候可以将密码字段设置为32位;
    • 在网站中用来产生token,进行加密验证;
  • 补充:django中应用MD5的时候,一般django配置文件settings.py文件中的SECRET_KEY作为;因此在使用,django的时候一定要保护好django的SECRET_KEY
import hashlib

SALT="盐"
def md5(strings):
    hash_object=hashlib.md5(SALT.encode("UTF-8"))#转换成字节
    hash_object.update(strings.encode('utf-8'))
    return hash_object.hexdigest()

if __name__ == '__main__':
    print(md5("test"))

image-20211130102440129

每天都是更接近成功的一天;

原文地址:https://www.cnblogs.com/Blogwj123/p/15623089.html