It is a wee Python3 program that attempts to compute every hash available in the hashlib and prints the results and attempts to "match" additional input parameters against all the hashes telling you what it found. It is a little slow for large files. My latest fiddle is here: ``` from sys import argv, exit, version, version_info import hashlib def prettyPrintHexString(hexstring, Wrap=False, indent=0): retval = '' for i in range(0, len(hexstring), 4): retval += hexstring[i:i+4] + ' ' if Wrap: if len(retval) - indent > 65: retval = retval.strip() + '\n' + ' '*indent Wrap = False return retval.strip() print(version) print(version_info) hList = [] for i in argv[1:]: if i.startswith('--'): hList.append(i[2:]) for i in hList: argv.remove('--' + i) try: f = open(argv[1], 'rb') except: print("File", argv[1], "could not be opened for reading") exit(-1) if not hList: hList = ['md2', 'md4', 'md5', 'sha', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512' ] for algo in sorted(hashlib.algorithms_available): if not algo in hList: hList.append(algo) hObj = [ ] hTxt = [ ] for hash in hList: try: hObj.append(hashlib.new(hash)) hTxt.append(hash) except: pass x = 1 size = 0 mb = 1024*1024 rs = 16*mb bs = chr(8)*79 while x: data = f.read(rs) x = len(data) if x > 0: size += x for i in range(len(hObj)): hObj[i].update(data) data = None print(bs + 'Read: %5d MBytes' % (size/mb,), end=' ', flush=True) print(bs, ' '*20, end=' ') f.close() print(bs + " File Name: ", argv[1]) print(" Size: ", size) for i in range(len(hObj)): try: print("%10s: " % (hTxt[i]), prettyPrintHexString(hObj[i].hexdigest().upper(), Wrap=True, indent=13)) except: pass test = ''.join(argv[2:]).lower() if test: for i in range(len(hObj)): try: check = hObj[i].hexdigest().lower() if test == check: print(hTxt[i], "MATCH") elif test in check: print(hTxt[i], "PARTIAL @ %d:%d" % (check.find(test), len(test))) except: pass ```