Hm... Naja, angenommen du setzt den Vorschlag um, den der Engel gebracht hat. Dann sähe das in Delphi in etwa so aus:
key := md5str[1] + md5str[3] + md5str[7]; //usw...
Ich weiß jetzt nicht, wie das im Disassembler aussähe, aber ich könnte mir vorstellen, dass man so relativ schnell erkennt, auf welche Elemente zugegriffen wird.
Daher war meine Idee, Primzahlen als Zugriff auf die einzelnen Elemente zu nutzen. Sagen wir, dein Key soll 6 Stellen haben, dann könnte eine Schleife so aussehen:
Delphi-Quellcode:
var
prime: integer;
idx,n: integer;
//[...]
key := '';
idx := 3;
for i := 0 to 5 do
begin
repeat
idx := idx + 2; //nur ungerade Zahlen
until isPrimzahl(idx);
key := key + md5str[idx];
end;
Die Funktion isPrimzahl prüft, ob eine Zahl eine Primzahl ist. Ist sie das, so wird sie als Index verwendet. Ist sie es nicht, wird die nächste ungerade Zahl getestet. Zum Test auf Primzahl fällt mir jetzt Miller-Rabin ein.
Hier gibst was gut lesbares und lesenswertes dazu [PDF].
Und ich denke, für den Miller-Rabin-Test wird sich bestimmt eine Implementation in Pascal finden lassen.
Das Ziel ist eigentlich, dem Hacker oder RE die Arbeit möglichst aufwändig zu gestalten, indem man möglichst viele Berechnungen mit möglichst vielen Sprüngen (Bedingungen, Schleifen) einbaut. Die Script Kiddies werden so schnell aufgeben, da ihnen dass dann zu mühsam wird. Es soll aber auch exemplare geben, die durch sowas erst richtig aufblühen.
Ich hoffe, meine geistigen Ergüsse waren etwas verständlich.