Ein Hash hat gerade die absichtliche Eigenschaft, daß man den Eingangsstring nicht berechnen kann ... nichtmal mit Bruteforce.
Das spielt doch keine Rolle! Sobald man nur einen Treffer findet ist der Schlüssel/Passwort/WasAuchImmer gebrochen.
Natürlich gibt es zu einem Hashwwert im Prinzip unendlich viele Schüssel.
Aber der Schlüssel mit der kürzesten Länge wird mit höchster Wahrscheinlichkeit der ursprüngliche Schlüssel sein.
Wenn man weiss dass ein Passwort eine bestimmte maximale Länge hat, sich auch ganz bestimmten Zeichen (z.B. nur Ziffern) zusammensetzt und mit MD5 (oder MD4, Sha1,...) gehasht wurde kann man ausrechnen wie viele mögliche Kombinationen er gibt.
Wenn es nicht zu viele Kombinationen sind kann man mit Bruteforce leicht zum Erfolg kommen.
Selbst wenn das Passwort "gesalzen" ist, aber die Methode bekannt ist kann man Bruteforce ansetzen.
Delphi-Quellcode:
// Pseudocode
function SaltPW(const PW:string):string;
begin
return "salt42" + PW;
end;
for i:= minlen to maxlen do
foreach pw:string in Range(['0'..'9', 'a'..'z'], i) do
begin
if(MD5string(SaltPW(pw)) = '51f6f8fe03a390d3de50ad49913d4b66' then
begin
ShowMessage('Passwort='+pw);
return;
end;
end