import hashlib, string, itertools, random from Crypto.Hash import MD2 input = '899ba80150a8672d2f48e35dd50798' #str = string.printable[:94] i=0 found = True while True: str= ''.join(random.choice(string.printable[:94]) for i in range(20)) for p in itertools.product(str, repeat=6): val1 = ''.join(p) md2 = MD2.new(val1.encode('utf-8')).hexdigest() if md2[0:6] == input[0:6]: print 'md2 collision found : %s' % md2[0:6] break for p in itertools.product(str, repeat=6): val2 = ''.join(p) md5 = hashlib.md5(val2.encode('utf-8')).hexdigest() if md5[6:12] == input[6:12]: print 'md5 collision found : %s' % md5[6:12] break for p in itertools.product(str, repeat=6): val3 = ''.join(p) sha1 = hashlib.sha1(val3.encode('utf-8')).hexdigest() if sha1[12:18] == input[12:18]: print 'sha1 collision found : %s' % sha1[12:18] break for p in itertools.product(str, repeat=6): val4 = ''.join(p) sha256 = hashlib.sha256(val4.encode('utf-8')).hexdigest() if sha256[18:24] == input[18:24]: print 'sha256 collision found : %s' % sha256[18:24] break for p in itertools.product(str, repeat=6): val5 = ''.join(p) sha512 = hashlib.sha512(val5.encode('utf-8')).hexdigest() if sha512[24:30] == input[24:30]: print 'sha512 collision found : %s' % sha512[24:30] break coll = val1 + val2 + val3 + val4 + val5 i+=1 print '[%d] collision is : %s' % (i,coll)