Mr.NiceGuy: Wie benutzt man "crypt"?

Hi,
habe in einem Buch lediglich über den Befehl gelesen, aber kein Anwendungsbeispiel gefunden. Ich möchte z.B. ein Wort crypten und dann mit einem bereits gecrypteten Wort vergleichen ob dies übereinstimmt. (Z.B. mit einem Eintrag aus der passwd/shadow)
Kann mir da jemand weiterhelfen oder sagen wo ich sowas nachlesen kann?
danke!!!

  1. Hallo Herr NiceGuy,

    crypt benötigt als Parameter einen string, der verschlüsselt werden soll, und einen sogenannten "salt", der (mit-)angibt, wie der string verschlüsselt werden soll. Der Salt wird im verschlüsselten String als die ersten beiden Buchstaben gestored (ich mag neu-Deutsch ;).
    Der Salt darf nur a-z,A-Z und 0-9 enthalten.

    r07b6Ho09Y6kI

    Bei diesem gecryptetem String ist der Salt "r0" - wenn du den Richtigen String per

    target=crypt ("[verratichnich]","r0");

    verschlüsselst, erhältst du genau diesen Wert.
    Ich weiss nicht, ob perl unter Windows das auch macht, weil Windows scheints kein crypt() bereitstellt.

    bis dann
    gero

    1. Ich weiss nicht, ob perl unter Windows das auch macht, weil Windows scheints kein crypt() bereitstellt.

      crypt PLAINTEXT,SALT
         May not be available if library or source was not provided when building perl. (Win32)
      (aus perlport.html von ActivePerl 5.005)

      Es scheint also möglich zu sein, ein Perl für Windows so zusammenzubauen, daß eine crypt()-Funktion verfügbar ist - nur muß man dafür erst mal eine haben.

      Schnell noch das, was Perl selbst über crypt() schreibt - es las sich so nett:

      crypt PLAINTEXT,SALT

      Encrypts a string exactly like the crypt(3) function in the C library (assuming that you actually have a version there that has not been extirpated as a potential munition). This can prove useful for checking the password file for lousy passwords, amongst other things. Only the guys wearing white hats should do this.

      Note that crypt() is intended to be a one-way function, much like breaking eggs to make an omelette. There is no (known) corresponding decrypt function. As a result, this function isn't all that useful for cryptography. (For that, see your nearby CPAN mirror.)

      Here's an example that makes sure that whoever runs this program knows their own password:

      $pwd = (getpwuid($<))[1];
             $salt = substr($pwd, 0, 2);

      system "stty -echo";
             print "Password: ";
             chop($word = <STDIN>);
             print "\n";
             system "stty echo";

      if (crypt($word, $salt) ne $pwd) {
                 die "Sorry...\n";
             } else {
                 print "ok\n";
             }

      Of course, typing in your own password to whoever asks you for it is unwise.

    2. Ich weiss nicht, ob perl unter Windows das auch macht, weil Windows scheints kein crypt() bereitstellt.

      Halt, einen habe ich noch ...

      Aus der Perl 5.004-Dokumentation, die offizielle Auflistung aller Fehlermeldungen, die Perl generieren kann (perldiag.html):

      "The crypt() function is unimplemented due to excessive paranoia"
      (FATAL) Configure couldn't find the crypt() function on your machine, probably because your vendor didn't supply it, probably because they think the U.S. Government thinks it's a secret, or at least that they will continue to pretend that it is. And if you quote me on that, I will deny it.