Ricardo: crypt unter perl

Hallo allerseits,

wie kann man die crypt an weisung unter Perl verwenden. Ich benötige sie um selbst unter apache .htaccess Dateien zu erstellen

Ricardo

  1. Hi,

    wie kann man die crypt an weisung unter Perl verwenden. Ich benötige sie um selbst unter apache .htaccess Dateien zu erstellen

    perldoc -f crypt sagt Dir alles, was Du wissen mußt. Auf einigen archaischen Systemen (Windows) haben einige Perl-Versionen kein crypt (Zitat) "due to excessive paranoia". Schaue Dich für diese Systeme auf http://www.perl.com/CPAN/ nach entsprechenden Modulen um.

    Cheatah

  2. hi,

    wenn dein system das unterstützt (linux oder so) dann einfach:
    $crypted_string = crypt($string,$salz);

    wobei $salz (frei übersetzt ;) sowas wie ein verschlüsselungscode ist.

    bye, Spark

    1. hi,

      selber hi!

      wobei $salz (frei übersetzt ;) sowas wie ein verschlüsselungscode ist.

      Was sich dahinter verbirgt, kannst Du u.a. hier nachlesen: <../../sfarchiv/2000_1/t11109.htm>.

      Guß Frank

      1. wobei $salz (frei übersetzt ;) sowas wie ein verschlüsselungscode ist.
        Was sich dahinter verbirgt, kannst Du u.a. hier nachlesen: <../../sfarchiv/2000_1/t11109.htm>.

        gut, thx, das hatte ich mir so schon gedacht. war mir bissher nur ziemlich egal weils ja funktioniert *g*

        Guß Frank

        pass auf wo du hingießt ;)

        Spark

  3. Hallo Ricardo

    Vielleich so (inkl. mehr oder minder zufälliger Generierung des salt):

    $pass = [das gewünschte Passwort];

    @set = ('a'..'z');
    for ($i = 0; $i < 2; $i++) {
      $randum_num = int(rand($#set + 1));
      $salt .= @set[$randum_num];
    }

    $crypt = crypt($pass, $salt);  
    

    Gruss,
      
       Thorsten

    1. hi,

      Vielleich so (inkl. mehr oder minder zufälliger Generierung des salt):

      »»         $pass = [das gewünschte Passwort];

      »»         @set = ('a'..'z');
      »»  for ($i = 0; $i < 2; $i++) {
      »»   $randum_num = int(rand($#set + 1));
      »»   $salt .= @set[$randum_num];
      »»  }
      »»  
      »»  $crypt = crypt($pass, $salt);

      macht das wirklich sinn? ich meine, sollte man ein "zufallssalz" generieren?
      immerhin muss man das dann ja auch irgendwie immer abspeichern, sonst nützt einem das verschlüsselte ding ja nichts mehr oder liege ich da falsch?

      Spark

      1. Hi,

        macht das wirklich sinn? ich meine, sollte man ein "zufallssalz" generieren?

        ja, auf jeden Fall. Das erhöht die Sicherheit immens.

        immerhin muss man das dann ja auch irgendwie immer abspeichern, sonst nützt einem das verschlüsselte ding ja nichts mehr oder liege ich da falsch?

        Die ersten zwei Zeichen des gecrypteten Passwords _sind_ das Salt.

        Cheatah

        1. Die ersten zwei Zeichen des gecrypteten Passwords _sind_ das Salt.

          Und um den Gedankengang fortzufuehren: Deshalb benutzt man einfach das verschluesselte Passwort als salt, wenn man ein unverschluesseltes auf Richtigkeit ueberpruefen will. Es muss wieder das verschluesselte herauskommen. Also:

          $access_granted = (crypt($password, $crypted) eq $crypted) ? 1 : 0;

          wobei $password das vom Benutzer eingegeben Passwort ist, $crypted das verschluesselte, und $access_granted ein Boolean, in dem dann steht, ob das eingegebene Passwort richtig ist.

          So long

          1. Und um den Gedankengang fortzufuehren: Deshalb benutzt man einfach das verschluesselte Passwort als salt, wenn man ein unverschluesseltes auf Richtigkeit ueberpruefen will. Es muss wieder das verschluesselte herauskommen. Also:

            »»   $access_granted = (crypt($password, $crypted) eq $crypted) ? 1 : 0;

            wobei $password das vom Benutzer eingegeben Passwort ist, $crypted das verschluesselte, und $access_granted ein Boolean, in dem dann steht, ob das eingegebene Passwort richtig ist.

            thx :) jetzt hab ichs sogar verstanden.
            nur, warum muss man das salt jedesmal neu berechnen? das ist doch ziemlich umständlich.
            es wäre einfacher einfach crypt($password) schreiben zu können und perl berechnet das zufalls salt dann selbeständig.
            gibt es diese möglichkeit oder sollte man sich dafür eine eigene kleine routine schreiben?

            Spark

            1. 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

    2. hi!

      $pass = [das gewünschte Passwort];
      @set = ('a'..'z');

      Damit schließt du allerdings nur einen Teil der möglichen verwendbaren ein.

      for ($i = 0; $i < 2; $i++) {
        $randum_num = int(rand($#set + 1));
        $salt .= @set[$randum_num];
      }
      $crypt = crypt($pass, $salt);

      Kürzer:
      === cut ===
          my $salt = join '', ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64];
          my $crypt = crypt $pass, $salt;
      === cut ===

      bye, Frank!