python脚本简单实现对压缩文件是否加密的检测

因为业务需求,需要编写一个脚本实现对压缩文件加密的检测,调研了下,将自己的思路分享下

常见的压缩文件格式有 zip, gz, tar, rar

它们的压缩加密方式不同,分别处理这四种格式

对于zip格式

zip的加密主要是对加密标志位的检测,如果是奇数则为加密,如果是偶数则没有加密。可以通过python标准库的zipfile来实现

  def check_zip(file: str) -> bool:
      '''
      name: 
      des: 检测zip格式压缩保是否加密
      param {传入的文件名}
      return {True:文件加密 False:文件没加密}
  
      '''
      zf = zipfile.ZipFile(file)
      for zinfo in zf.infolist():
          is_encrypted = zinfo.flag_bits & 0x1
          if is_encrypted:
              return True
          else:
              return False

对于rar格式

加密原理可以百度,python标准库里没有检测rar的库,需要pip install rarfile

  def check_rar(file: str) -> bool:
      '''
      name: 
      des: 检测rar格式压缩包是否加密
      param {传入的文件名}
      return {True:文件加密 False:文件没加密}
  
      '''
      rf = rarfile.RarFile(file)
      is_encrypted = rf.needs_password()
      if is_encrypted:
          return True
      else:
          return False

对于gz格式

gz文件一般不加密常见的是这种.tar.gz格式的

对于tar格式

在python标准库我没找到关于检测加密的方法,对于tar的加密原理我也没深入了解,只是简单地通过能否打开压缩包来判断是否加密,若能解压缩说明,没加密,若不能解压缩,则加密了(这种判断方法不好,迫不得已而为之,若有更好的方法,欢迎大佬留言或私信)

  def check_gz_tar(file: str) -> bool:
      '''
      name: 
      des: 检测gz格式压缩包是否加密,注:gz文件一一般不加密的,检测得是.tar.gz是否加密
      param {传入的文件名}
      return {True: 文件加密 False: 文件没加密}
  
      '''       
      try:
          zf = tarfile.open(file)
          return False
      except Exception as e:
          return True

完整的代码请访问我的github

posted @ 2020-12-03 17:50  dacyuan  阅读(1190)  评论(1编辑  收藏  举报