Ich habe die originale Wortliste genommen und auf 10.000 Array-Einträge verkürzt. Letztes Wort ist dann 'bevy'. Nach dem (doppelt) suche ich auch:
<?php
### Vorbereitung
/*
$baselist = array_slice( file( 'wordlist.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES ) , 0 , 10000 );
echo count($baselist) . ' Elemente,' .PHP_EOL;
file_put_contents( 'array.serialized', serialize( $baselist ) );
exit;
#*/
$baselist = unserialize( file_get_contents( 'array.serialized' ) );
define ( 'BIN', md5( 'bevybevy', true ) );
foreach ( $baselist as $w1 ) {
foreach ( $baselist as $w2 ) {
#2.:
if ( BIN === md5( $w1 . $w2, true ) ) {
echo "$w1 $w2";
exit;
}
}
}
Auf dem „Raspberry Pi 4 Model B Rev 1.5“ mit 8GB, frisiert auf 1,8 GHz:
~/tmp$ time php test.php
bevy bevy
real 0m49,090s
user 0m48,805s
sys 0m0,105s
Für 100.000.000 (100 Mio) mal „Hash bauen und vergleichen“ ist das gar nicht schlecht. Mit der hexadezimalen Ausgabe von md5() und den nicht typstrengen Vergleichen ( ==
statt ===
) ist das bei mir sogar 10 Sekunden langsamer.
PHP-Version ist 8.2.