Non sarà veloce come una GPU, ma un semplice script di forza bruta come il seguente codice Python:
import hashlib
import time
def ipv4_md5_search(hash, range_start=0, range_end=256):
for a in range(range_start, range_end):
print a, time.ctime() # show progress every time new value of a is done.
for b in range(256):
for c in range(256):
for d in range(256):
h = hashlib.md5('%s.%s.%s.%s' % (a,b,c,d)).hexdigest()
if h == hash:
print a,b,c,d
return True
print "No match found"
ipv4_md5_search('f39d1e9bce27c0f31f536a272e544a16')
troverà la risposta in circa un'ora (caso peggiore) e sarà molto più veloce se la si parallelizza. Ad esempio, su una CPU quad-core iperthreaded, avvia solo 8 processi facendo:
ipv4_md5_search('f39d1e9bce27c0f31f536a272e544a16',0,32)
ipv4_md5_search('f39d1e9bce27c0f31f536a272e544a16',32,64)
ipv4_md5_search('f39d1e9bce27c0f31f536a272e544a16',64,96)
ipv4_md5_search('f39d1e9bce27c0f31f536a272e544a16',96,128)
ipv4_md5_search('f39d1e9bce27c0f31f536a272e544a16',128,160)
ipv4_md5_search('f39d1e9bce27c0f31f536a272e544a16',160,192)
ipv4_md5_search('f39d1e9bce27c0f31f536a272e544a16',192,224)
ipv4_md5_search('f39d1e9bce27c0f31f536a272e544a16',224,256)
e lo accelera di un fattore 8. Non invierò il tutto, ma dirò un indirizzo IPv4 in notazione decimale puntata corrisponde al tuo hash MD5 e la corrispondenza corretta inizia con 84.200
(nel formato x.x.x.x
- nessuna nuova riga o spazio o altro). Mi ci sono voluti circa 15 minuti per trovare il tempo di creare script e avviare le attività.