ページ

2016年7月12日火曜日

Pythonで大きいファイルのMD5を計算する

Python 2.7, 3

本当はSHAの256がほしかったんだけど、
ダウンロード元のメーカーが提供しているSHA256が間違っていて使えないことが判明したので・・・;;
MD5で我慢してみる。

import hashlib

BUFFER=4096

def md5sum( filepath ):
    hasher = hashlib.md5()
    with open( filepath, "rb" ) as f:
        for chunk in iter( lambda: f.read( BUFFER * hasher.block_size ), b'' ):
            hasher.update( chunk )
    return hasher.hexdigest()

print (md5sum("./md5sum.py"))


md5となっているところをsha256に変更すればSHA256でも動く


SHA1なら下記のような感じで・・・
import hashlib

BUFFER=4096

def sha1sum( filepath ):
    hasher = hashlib.sha1()
    with open( filepath, "rb" ) as f:
        for chunk in iter( lambda: f.read( BUFFER * hasher.block_size ), b'' ):
            hasher.update( chunk )

    return hasher.hexdigest()

print sha1sum("./sha1sum.py")
ファイルサイズが小さいと、本家sha1sumより2桁くらい遅いけど
ファイルが300Mくらいまで大きくなると逆転する。

意外と効率良いのかも?


hashlibが対応している暗号化方式は下記で確認できる。

print hashlib.algorithms