thx :) jetzt hab ichs sogar verstanden.
nur, warum muss man das salt jedesmal neu berechnen? das ist doch ziemlich umständlich.
Keiner verlangt, dass Du es immer neu berechnest, Du kannst natuerlich auch immer dasselbe verwenden. Nur dann braeuchte man auch gar kein salt. Man *will* aber eins haben: Verschluesselt man denselben String mit einem anderen Salt, ist bekanntlich das Ergebnis ein anderes. Wenn nun z.B. mehrere User dasselbe Passwort verwenden, oder derselbe User verwendet an verschiedenen Stellen dasselbe (wird ja gern gemacht), kann man dies wegem dem unterschiedlichen Salt nicht anhand der gecrypteten Strings feststellen. Das ist meines Wissens alles, was hinter der Sache steckt.
es wäre einfacher einfach crypt($password) schreiben zu können und perl berechnet das zufalls salt dann selbeständig.
Klar, mach doch einfach ne Funktion mycrypt(), die das macht. Du brauchst aber trotzdem noch die einfache crypt-Funktion, denn zum Vergleichen, ob ein Passwort korrekt ist, musst Du ja das verschluesselte Passwort als Salt angeben koennen. Kann man aber beides zu einer Funktion zusammenfassen, ungefaehr so:
sub mycrypt {
my ($string, $salt) = (shift, shift);
unless (defined($salt)) { # kein salt uebergeben -> selber eins bauen
my @set = ('.', '/', 0..9, 'A'..'Z', 'a'..'z');
$salt = $set[rand(64)] . $set[rand(64)];
}
return crypt($strimg, $salt);
}
So long