PythonでMD5ダイジェスト値を求める

hashlib を使う。
試しに、MD5 を計算/チェックするスクリプトを書いてみた。

#!/usr/bin/env python
# encoding: utf-8

import argparse
import hashlib

script_version = "0.1.0"

def calc_md5(filename):
    m = hashlib.md5()
    f = open(filename, "rb")
    m.update(f.read())
    f.close
    return m.hexdigest()

def check_md5(filename, md5):
    return md5 == calc_md5(filename)

parser = argparse.ArgumentParser(description="calc/check MD5.")
parser.add_argument("file", metavar="FILE", action="store",
                    help="specify file.")
parser.add_argument("-v", "--version", action="version", version=script_version,
                    help="show version and exit")
parser.add_argument("-c", "--check", dest="check", action="store_true",
                    help="check MD5")
args = parser.parse_args()

if args.check:
    f = open(args.file, "r")
    s = f.read().strip()
    f.close()
    md5, filename = s.split(" ")
    if check_md5(filename, md5):
        print filename + " OK"
    else:
        print filename + " FAILED"
    else:
        filename = args.file
print calc_md5(filename) + " " + filename

実行例:

takatoh@apostrophe $ python md5.py sample.zip > a.md5
takatoh@apostrophe $ cat a.md5
72f163b717dbe53cd58902713dc10152  sample.zip
takatoh@apostrophe $ python md5.py -c a.md5
sample.zip OK