#!/usr/bin/env python from __future__ import print_function import binascii import hashlib def H(x): return hashlib.sha256(x).digest() def compute_fingerprint(x, double): digest = H(H(x)) if double else H(x) return binascii.hexlify(digest).decode() if __name__ == "__main__": import argparse parser = argparse.ArgumentParser() parser.add_argument("file", type=argparse.FileType("rb"), help="input file") parser.add_argument("--offset", type=int, default=0, help="skip bytes at start of input") parser.add_argument("--max-size", type=int, help="maximum input file size") parser.add_argument("--double", action="store_true", help="use SHA-256d instead of SHA-256") args = parser.parse_args() data = args.file.read() size = len(data) fingerprint = compute_fingerprint(data[args.offset:], args.double) print("Filename :", args.file.name) print("Fingerprint :", fingerprint) print("Size : {} bytes (out of {} maximum)" .format(size, args.max_size))