Wenn schon optimieren dann:
#1.:
define ( 'BIN', hex2bin( '7d5e051c603636bbd8b45c9d59ba0ff4' ) );
foreach ( $baselist as $w1 ) {
foreach ( $baselist as $w2 ) {
#2.:
if ( BIN === md5( $w1 . $w2, true ) ) {
echo "$w1 $w2";
exit;
}
}
}
Gezeigte Optimierungen:
-
Der Job, aus dem binärem Ergebnis von md5() noch die hexadezimale Präsentation zu erstellen, kostet Zeit. Also einmalig die vorliegende hexadezimale Präsentation des Hashes in eine binäre umwandeln und nur die binäre Form des Hashes ermitteln.
-
Der typstrenge Vergleich versucht nicht noch eine Gleichheit via Umwandlung des Inhalts vorzunehmen.
Nicht gezeigt:
Dann sollte man das ganze auf so viele Jobs aufteilen, wie man Prozessorkerne (oder Threads, falls man die im BIOS nicht abstellt, was bei der Aufgabe aber angemessen wäre) - hat. Dazu wäre wäre für jeden Job eine partielle Wortliste zu erzeugen, die in den foreach-Schleifen aber mit der vollständigen Liste kombiniert wird.
Ferner sollten bei einem Treffer dann alle übrigen Jobs abgebrochen werden. Da PHP-Skripte die eigene PID kennen müsste diese dazu in eine Datei weggeschrieben werden und nach dem echo
via Systembefehl (kill
, pkill
e.t.c. ) die Prozesse beendet werden.
Was mir noch einfällt: Eigentlich sieht das aus wie ein Job für Grafikkarte. Wer macht sowas in PHP?