SQLite Forum

sha3 (sha3sum)
Login
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
```