Einfach so einen guten Bruteforce zu schreiben ist nicht.
Ich kenne mich nicht im Detail aus, aber kann dir paar Sachen sagen:
1) Bruteforce dauer kannst du nicht pauschalisieren, denn wie lange es dauert hängt von der Hardware ab.
2) Du kannst mit der CPU bruteforcen (die ja heutzutage oft 8 Kerne hat) oder du kannst mit der Grafikkarte bruteforcen (GTX 1080 hat z.b. 2560 Kerne).
Hier fängt es an: Die Anzahl der Kerne ist natürlich von großer Bedeutung, du kannst pro Kern schließlich 1 Versuch jeweils parallel laufen lassen.
Klar, es gibt auch Multithreading, aber da ist eben zu unterscheiden, dass nur ganz schnell zwischen den Versuchen "hin und her geswitched" wird und nicht wirklich parallel gearbeitet wird (auf 1 Kern).
Ich erkenne an deinem Code dass du noch viel weniger Plan hast als ich, also hier ein paar Tipps:
1) Achte imemr darauf, dass du Variablen per Referenz übergibst und nicht als Kopie.
Wenn du also eine Funktion hast:
Delphi-Quellcode:
function TestPassword(APlain : string) : boolean;
begin
Result := False;
if MD5(APlain) = pass then
Result := True;
end;
und du diese Funktion so aufrufen würdest:
for i := 0 to 100000000 do
begin
if TestPassword(arr[i]) then
begin
showmessage('found');
end;
end;
dann würde hier jedes Element aus arr bei der Übergabe an TestPassword kopiert werden, was auch ziemlich ineffizient ist. Also Call-by-Reference angucken.
2) Auf keinen Fall sowas machen wie jedes Passwort in ein Memo schreiben, das dauert ewig.
3) Multithreading, dazu kann man die Klasse TThread verwenden.
Abschließend lässt sich nur sagen dass es zwar schön zu sehen ist dass du dich für was interessiert und es auch versucht hast, aber dir mangelt es sehr wahrscheinlich an Wissen um sowas wirklich gut umsetzen zu können.
Edit:// Und wie schon gesagt wurde, bruteforced dein Code gar nichts, sondern gibt nur strings auf einem Memo aus.
Um das zu beschleunigen gibts übrigens Memo1.Beginupdate und Memo1.Endupdate.