# -*- coding: utf-8 -*- import hashlib import argparse def parse_args(): parser = argparse.ArgumentParser(description='py_split_hash') parser.add_argument('input', help='Input file path') parser.add_argument('--algo', help='Input algorithm (md5, sha1, sha224, sha256, sha384, sha512)', default = 'sha1') parser.add_argument('--size', help='Split size (1,048,576 10,485,760 104,857,600 1,073,741,824 byte)', default = 1048576) return parser.parse_args() def main(): args = parse_args() inputFile = args.input algo = args.algo splitSize = int(args.size) readBytes = 0 hash = getattr(hashlib, algo)() with open(inputFile, 'rb') as f: while True: chunk = f.read(splitSize) if len(chunk) == 0: break splitDigest = getattr(hashlib, algo)(chunk).hexdigest() print(f'{algo}({readBytes}): {splitDigest}') hash.update(chunk) readBytes += splitSize digest = hash.hexdigest() print(f'{algo}: {digest}') if __name__ == "__main__": main()