日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

          歡迎訪問 生活随笔!

          生活随笔

          當前位置: 首頁 > 编程语言 > python >内容正文

          python

          python解压加密zip文件_Python:解压缩前检测一个zip文件否为加密,两种算法。

          發布時間:2023/12/10 python 29 豆豆
          生活随笔 收集整理的這篇文章主要介紹了 python解压加密zip文件_Python:解压缩前检测一个zip文件否为加密,两种算法。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

          前一篇文章介紹了如何用python自動解壓縮加密的zip文件,

          但是有一個問題,在服務器端腳本在解加密zip文件之前,需要檢測其是否是加密文件,若是,則詢問密碼,結合密碼解壓縮;如果不是,則則直接解壓縮。本文的靈感取自一篇文章《Linux zip 加密壓縮》

          所有加密的zip文件頭8個字符好像都是這個樣子的

          0000000 4b50 0403 0014 0009

          0000008

          具體為什么會是這個格式,就不得而知了,需要以后做詳細的研究。

          還有另一個方法,就是通過python的 open() read()方法讀取前十個字節,顯示是十六進制數。經過測試,好像所有的zip文件前十個字節都是相同的,但是加密和未加密的文件則不同:

          加密zip文件:'PK\x03\x04\x14\x00\t\x00\x08\x00'

          未加密zip文件:'PK\x03\x04\x14\x00\x00\x00\x08\x00'

          其中前四個字節‘PK\x03\x04' 是文件頭標記。往后兩個字節 ‘\x14\x00' 是解壓文件所需的pkware的版本,再后來兩個字節 '\x00\x00' 或者 '\t\x00' 是全局方式位標記,最后兩個字節 '\x08\x00' 是壓縮方式。

          這里全局方式位置標記由于是否加密而有所不同,所以只需要比較這兩個十六進制數字是否相等即可。

          第二種方法還稍微快一些。

          順便說一下,博客園的文件上傳系統只能上傳zip文件,但是檢測模塊只是對文件后綴做分析。

          使用linux 下的hexdump十六進制查看器的代碼如下:

          1 #!/usr/bin/env python

          2 #_*_coding=utf-8_*_

          3

          4 importsubprocess5 importgetopt6 importsys7 importos8

          9 if __name__=='__main__':10 try:11 opts, args = getopt.getopt(sys.argv[1:], "")12 exceptgetopt.GetoptError, err:13 printstr(err)14 sys.exit(2)15 #check if the zipfile exists

          16 for arg inargs:17 if notos.path.isfile(arg):18 print "%s does not exists!" %arg19 sys.exit(2)20 #verify the zipfile

          21 f = subprocess.Popen(['hexdump', '-n', '8', "%s" % arg], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].rstrip()22 if f[23:27]=='0009':23 print "%s 是加密文件" %arg24 elif f[23:27]=='0000':25 print "%s 不是加密文件" %arg26 else:27 print "error"

          2. 使用python自帶的方法判斷的代碼如下:

          1 #!/usr/bin/env python

          2 #_*_coding=utf-8_*_

          3

          4 importsubprocess5 importgetopt6 importsys7 importos8

          9 if __name__=='__main__':10 encryptedzip='\t\x00'

          11 unencryptedzip='\x00\x00'

          12 zipfile='PK\x03\x04'

          13 try:14 opts, args = getopt.getopt(sys.argv[1:], "")15 exceptgetopt.GetoptError, err:16 printstr(err)17 sys.exit(2)18 #check if the zipfile exists

          19 for arg inargs:20 if notos.path.isfile(arg):21 print "%s does not exists!" %arg22 sys.exit(2)23 #verify the zipfile

          24 try:25 f=open("%s" % arg, "rb")26 top8hex=f.read(8)27 if top8hex[6:] ==encryptedzip:28 print "%s 是加密文件" %arg29 elif top8hex[6:] ==unencryptedzip:30 print "%s 不是加密文件" %arg31 elif not top8hex[:4] ==zipfile:32 print "%s 不是zip文件!" %arg33 exceptIOError, err:34 printstr(err)35 finally:36 f.close()

          以上兩種方法雖然是命令行程序,但是同樣可以運用到cgi中。

          如果有人能提供更到位、更精確的分析方法,請賜教:)

          總結

          以上是生活随笔為你收集整理的python解压加密zip文件_Python:解压缩前检测一个zip文件否为加密,两种算法。的全部內容,希望文章能夠幫你解決所遇到的問題。

          如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。