diff --git a/src/md5-analyzer.py b/src/md5-analyzer.py index f98d31e..018b2f5 100755 --- a/src/md5-analyzer.py +++ b/src/md5-analyzer.py @@ -13,44 +13,53 @@ import hashlib def main(): parser = argparse.ArgumentParser(prog="md5-analyzer", description='md5 analyzer for a cryptography assignment') parser.add_argument('-i', '--input', type=str, - help='an input that should be hashed.') + help='an input that should be hashed or used with iterate') parser.add_argument('-a', '--print-all', action="store_true", help="print all hashes in iterate mode") parser.add_argument('-t', '--iterate', action="store_true", help='iterate 0 to 999999 (chars), generate hashes for this, analyze it\'s hashes.') + parser.add_argument('-q', '--quiet', action="store_true", + help="print less") + parser.add_argument('-m', '--max', action="store", type=int, default=999999, + help="max value for iteration") args = parser.parse_args() + if args.iterate: if not args.input: args.input = "" print('='*80) hashlist = [] - max = 999999 searchbytes = "0000" - for i in range(0, max + 1): - # max should be included, so +x for the counter + for i in range(0, args.max + 1): + # args.max should be included, so +x for the counter input = (args.input + str(i)) hash = hashlib.md5(input.encode()) # print only every 1000 lines for performance - if i % 1000 == 0 or args.print_all: + if not args.quiet and i % 1000 == 0 or args.print_all: print("inp %s\t\t| out %s" % (input, hash.hexdigest())) if hash.hexdigest()[0:4] == searchbytes: - hashlist.append((i, hash.hexdigest())) - print("^" * 80) + hashlist.append((input, hash.hexdigest())) + if not args.quiet: + print("^" * 80) print('='*80) for (index, hash) in hashlist: - print("ind %i\t\t| has %s" % (index, hash)) + print("inp %s\t\t| has %s" % (index, hash)) print('='*80) - size_of_first_x = 2**16 - expected = size_of_first_x / max - print("found %d items.\nExpected %d (%f%%) from %d" % (len(hashlist), expected, expected / size_of_first_x, max)) + size_searchbytes = 2**16 + expected = 16**32 / size_searchbytes # 32 hex value chars in an md5 hash + print("found %d items (%f%%)" % (len(hashlist), len(hashlist) / size_searchbytes)) + print("Expected %d (%f%%) from %d" % (expected, expected / size_searchbytes, args.max)) exit() + if args.input: print("Hash for '%s':\n%s" % ( args.input, hashlib.md5(args.input.encode()).digest().hex() )) exit() - parser.print_usage() + + # else print help + parser.print_help()