No será tan rápido como una GPU, sino un simple script de fuerza bruta como el siguiente código de 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')
encontrará la respuesta en aproximadamente una hora (en el peor de los casos) y será significativamente más rápida si la paraleliza. Por ejemplo, en una CPU de cuatro núcleos con subprocesos, solo inicie 8 procesos haciendo:
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)
y lo acelerará en un factor de 8. No lo publicaré todo, pero diré una dirección IPv4 en notación decimal con puntos coincide con su hash MD5 y la coincidencia correcta comienza con 84.200
(en el formato x.x.x.x
- no hay líneas nuevas, espacios ni nada más). Tardé unos ~ 15 minutos en encontrar, incluido el tiempo para crear un script y ejecutar las tareas.