设为首页 加入收藏

TOP

Python基础(十六)(二)
2019-10-09 19:57:06 】 浏览:43
Tags:Python 基础 十六
换为一个固定长度的字符串

  • 数据转换流程:

    • 明文 —— 字节 —— 密文
  • hashlib模块的特点:

    • 转换的密文没有规律
    • 操作不可逆
    • 不同的bytes类型数据转换的密文一定不同
    import hashlib
    
    sha1 = hashlib.sha1()
    sha1.update("21".encode("utf-8"))  # 将21转换为密文
    print(sha1.hexdigest())
    
    sha1 = hashlib.sha1()
    sha1.update("12".encode("utf-8"))  # 将12转换为密文
    print(sha1.hexdigest())
    
    运行结果:  # 结果一定不同,且无规律
    472b07b9fcf2c2451e8781e944bf5f77cd8457c8
    7b52009b64fd0a2a49e6d8a939753077792b0554
    • 相同的bytes类型数据转换的密文一定相同
    import hashlib
    
    sha1 = hashlib.sha1()
    sha1.update("12".encode("gbk"))  # 用gbk进行编码
    print(sha1.hexdigest())
    sha1 = hashlib.sha1()
    sha1.update("12".encode("utf-8"))  # 用utf-8进行编码
    print(sha1.hexdigest())
    
    运行结果:  # 内容相同,无论编码方式是什么,密文一定相同,
    7b52009b64fd0a2a49e6d8a939753077792b0554
    7b52009b64fd0a2a49e6d8a939753077792b0554
  • 加密方式:

    • md5
    • sha1
    • sha256
    • sha512
  • 模块应用一:对数据进行加密

    • 方法介绍:

      hashlib.md5() 对应加密方式初始化
      obj.update() 向初始化的对象中添加要加密的内容,内容必须是字节码
      obj.hexdigest() 对对象进行加密
    • 普通加密:

      import hashlib
      
      md5 = hashlib.md5()  # 初始化使用md5加密方式的对象
      md5.update("zxd666".encode("utf-8"))  # 向对象添加要加密的内容,内容必须为字节码
      print(md5.hexdigest())  # 进行加密
      
      运行结果:
      fe02a10cda698ceb5a03022189199c49  # 相同明文,密文一定相同
      
    • 加盐加密:

      • 固定加盐:
      import hashlib
      
      md5 = hashlib.md5("盐".encode("utf-8"))  # 在初始化时可以对要加密的明文进行固定加盐,盐也需要转换为字节码
      md5.update("zxd666".encode("utf-8"))
      print(md5.hexdigest())
      
      运行结果:
      2bc9ae4e838be80068a6e4963626b92c  # 相同明文,密文一定相同
      
      • 动态加盐:
      import hashlib
      
      user = input("账号:")
      pwd = input("密码:")
      md5 = hashlib.md5(user.encode("utf-8"))  # 利用账号来给密码加盐,每个人的账号都不同,起到了动态加盐的效果
      md5.update(pwd.encode("utf-8"))
      print(md5.hexdigest())
      
      运行结果:
      账号:zxd
      密码:zxd123
      ddca7a4709d99ac8d1b3012b2e6a364a
      
    • obj.update()方法可以多次添加需要加密的内容

      import hashlib
      
      md5 = hashlib.md5()
      md5.update("zxd".encode("utf-8"))
      md5.update("666".encode("utf-8"))  # 可以分开多次添加
      print(md5.hexdigest())
      
      运行结果:
      fe02a10cda698ceb5a03022189199c49  # 与上面例子中普通加密的密文相同
      
  • 模块应用二:用于文件一致性校验

    • linux讲究:一切皆文件,我们普通的文件,视频,音频,图片,以及应用程序等都是文件。我们都从网上下载过资源,比如我们下载的Python解释器,当时你可能没有注意过,其实你下载的时候都是带一个MD5或者shax值的,为什么? 我们的网络世界是很不安全的,经常会遇到病毒,木马等,有些你是看不到的可能就植入了你的电脑中,那么他们是怎么来的? 都是通过网络传入来的,就是你在网上下载一些资源的时候,趁虚而入,当然大部分被我们的浏览器或者杀毒软件拦截了,但是还有一部分偷偷的进入你的磁盘中了。那么我们自己如何验证我们下载的资源是否有病毒呢?这就需要文件的一致性校验了。在我们下载一个软件时,往往都带有一个MD5或者shax值,当我们下载完成这个应用程序时你要是对比大小根本看不出什么问题,你应该对比他们的md5值,如果两个md5值相同,就证明这个应用程序是安全的,如果你下载的这个文件的MD5值与服务端给你提供的不同,那么就证明你这个应用程序肯定是植入病毒了(文件损坏的几率很低),那么你就应该赶紧删除,不应该安装此应用程序。
    • 我们之前说过,md5计算的就是bytes类型的数据的转换值,同一个bytes数据用同样的加密方式转化成的结果一定相同,如果不同的bytes数据(即使一个数据只是删除了一个空格)那么用同样的加密方式转化成的结果一定是不同的。所以,hashlib也是验证文件一致性的重要工具。

    • 文件校验实例:

      import hashlib
      
      def file_check(file_path):
          with open(file_path,mode='rb') as f1:
              sha256 = hashlib.md5()
              while 1:
                  content = f1.read(1024)
                  if content:
                      sha256.update(content)
                  else:
                      return sha256.hexdigest()
      print(file_check('python-3.6.8-amd64.exe'))
      
  • (三)collections模块

    • collections模块提供了一些额外的数据类型和一些集合类的操作
    1. 之前提到过的官方判断可迭代对象和迭代器的方法:Iterable、Iterator

      from collections import Iterable, Iterator
      
      lst = [1,2,3,4,5]
      l_iter = iter(lst)
      print(isinstance(lst, Iterable))
      print
    首页 上一页 1 2 3 下一页 尾页 2/3/3
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇tensor flow 线性回归 下一篇零基础学python,制作全网Vip视频..

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目