Stefan Muenz: Die Funktionen crypt() und rand()

Beitrag lesen

Hallo Christian,

  1. Wenn ich ein Passwort mit crypt() verschlüssel, dann muss das doch auf folgende Weise geschehen:
    crypt PLAINTEXT,SALT
    wofür steht SALT? Was muss ich da einsetzen? Ist das der Verschlüsselungskey?

In der Original-Perldoku findest du folgendes Beispiel:

print "Password: ";
    chomp($word = <STDIN>);
    print "\n";
    system "stty echo";
    if (crypt($word, $pwd) ne $pwd) {
        die "Sorry...\n";
    } else {
        print "ok\n";
    }

Es wird also ein String in $word eingelesen, der als User-Passworteingabe interpretiert werden soll. Das Script kennt das Passwort im verschluesselten Zustand, das es in $pwd gespeichert hat. Mit Hilfe des crypt-Befehls ueberprueft es nun, ob die "Verkryptung" von $word nach C/Unix-Standard auf $pwd passt.

Die Doku dazu im Wortlaut: "When verifying an existing encrypted string you should use the encrypted text as the salt (like crypt($plain, $crypted) eq $crypted). This allows your code to work with the standard crypt() and with more exotic implementations"

  1. Mit der Funktion rand() kommt bei mir NIE eine zufällige Zahl! Wenn ich z. B.

$zahl = int(rand 99999)+1;
print $zahl;

Achte mal auf die Perl-Version, die du benutzt! Wenn es eine unterhalb von 5.004 ist, musst du zuerst explizit die Funktion srand() aufrufen, bevor rand() was Brauchbares liefert. Ab 5.004 ruft rand() srand() intern erst mal auf. Beispielaufruf fuer srand:

srand (time ^ $$);

Aber nur _einmal_ im gesamten Script!

viele Gruesse
  Stefan Muenz