zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    了解AOP
    Struts2 拦截器与Spring AOP的区别
    Spring核心技术之IoC和AOP
    产品经理历险记-2-如何把需求聊得更细
    产品经理历险记-1-记录一次事故
    C# 使用 Lotus notes 公共邮箱发送邮件
    设计模式 5/23 原型模式
    设计模式 4/23 建造者模式
    设计模式 3/23 抽象工厂模式
    设计模式 2/23 工厂模式(二)
  • 原文地址:https://www.cnblogs.com/Blogwj123/p/15623089.html
Copyright © 2011-2022 走看看