• 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

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

  • 相关阅读:
    20160227.CCPP体系详解(0037天)
    MinerUtil.java 爬虫工具类
    MinerUrl.java 解析页面后存储URL类
    MinerThreadPool.java 线程池
    MinerStoreThread.java 存储线程
    MinerQueue.java 访问队列
    MinerMonitorThread.java 监控线程
    MinerHtmlThread.java 爬取页面线程
    上班跟打DotA感觉差不多?姑娘你没事儿吧
    7月3日云栖精选夜读:强大的PyTorch:10分钟让你了解深度学习领域新流行的框架
  • 原文地址:https://www.cnblogs.com/Blogwj123/p/15623089.html
Copyright © 2020-2023  润新知