2016-09-01 9 views
1

ZipFileのMD5ハッシュを作成したいのですが、その中のファイルではありません。しかし、ZipFileオブジェクトはストリームに簡単に変換できません。ZipFileのMD5ハッシュを作成する

from hashlib import md5 
from zipfile import ZipFile 

zipped = ZipFile(r'/Foo/Bar/Filename.zip') 
hasher = md5() 
hasher.update(zipped) 

return hasher.hexdigest() 

上記のコードでは、エラー:TypeError: must be convertible to a buffer, not ZipFileが生成されます。

ZipFileをストリームに変換する簡単な方法はありますか?

ここにセキュリティ上の問題はありません。以前はファイルを見たことがあるかどうかを判断する簡単な方法が必要です。 hash(zipped)はうまく動作しますが、可能であれば、もう少し頑強なものが必要です。この関数は、任意のファイルのMD5ハッシュを返す必要があります

+7

通常のファイルとしてアクセスしてください。アーカイブ内のファイルにアクセスしたい場合は 'zipfile'を使うだけです。 – Barmar

+0

ハ!私はこれを見ていたほど難しくないことを知っていました!それを回答として投稿したいなら、私はそれを受け入れます。 – Batman

答えて

3

、それはパスです提供は(pycryptoモジュールが必要):

from Crypto.Hash import MD5 


def get_MD5(file_path): 

    chunk_size = 8192 

    h = MD5.new() 

    with open(file_path, 'rb') as f: 
     while True: 
      chunk = f.read(chunk_size) 
      if len(chunk): 
       h.update(chunk) 
      else: 
       break 

    return h.hexdigest() 

print get_MD5('pics.zip') # example 

出力:

6a690fa3e5b34e30be0e7f4216544365 

Info on pycrypto

4

をジャスト開きます通常のファイルとしてZipFile。次のコードは私のマシンで動作します。

from hashlib import md5 
m = md5() 
with open("/Foo/Bar/Filename.zip", "rb") as f: 
    data = f.read() #read file in chunk and call update on each chunk if file is large. 
    m.update(data) 
    print m.hexdigest() 
関連する問題