Passwortverschlüsselung in .htpasswd

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Isch habs. hab in einem Verwaltungstool aus dem Internet eine brauchbare Routine gefunden, wie htpasswd-Kennwörter erstellt werden können. Ist sicherlich nur eine Möglichkeit, aber wie ich finde eine relativ einfache.

    Hier die kleine Routine. Was ich halt bisher nicht wusste, die verschlüsselten Kennwörter ändern sich bei jeder neuen Generierung des gleichen Kennworts.

    PHP-Code:
    <?php

    //Das Kennwort im Rohzustand
    $passwordalt "test";

    //Zunächst wird eine Zufallszahl erstellt: rand()
    //Aus dieser Zufallszahl wird eine eindeutige ID erstellt: uniqid()
    //Diese eindeutige ID wird mit nach MD5-Standard verschlüsselt: md5()
    $schritt1 md5(uniqid(rand()));


    //Der aus Schritt 1 erstellte String wird abgeschnitten.
    //Von der ersten Stelle an, über zwei Stellen Längt: substr()
    //Unn fertig ist unsere wunderbare zweistellige Zufallszahl
    $schritt2 substr($schritt102);

    //Das neue Passwort wird verschlüsselt: crypt()
    //Zum Verschlüsseln mit crypt() werden zwei Werte benötigt:
    //Das unverschlüsselte Kennwort und unsere Zufallszahl
    $passwordneu crypt($passwordalt$schritt2);

    //Als Ausgabe erhalten wir ein Kennwort, das zumindest beim meinem 
    //Provider (SCO Unix, Apache) und auf meinem Testwebserver (Windows, Apache) funktioniert.
    echo $password;

    ?>
    Nun brauch ich gar nicht mehr serverseitig versuchen, mit htpasswd die Kennwörter zu erstellen, denn hiermit kann ich das .htpasswd-File direkt schreiben.

    Gruß, Chriss

    Kommentar


    • #17
      Original geschrieben von Tomcat Chriss
      Was ich halt bisher nicht wusste, die verschlüsselten Kennwörter ändern sich bei jeder neuen Generierung des gleichen Kennworts.
      nein, wirklich :-)

      könnte das vielleicht hierran liegen:
      PHP-Code:
      //Zunächst wird eine Zufallszahl erstellt: rand()
      //Aus dieser Zufallszahl wird eine eindeutige ID erstellt: uniqid()
      //Diese eindeutige ID wird mit nach MD5-Standard verschlüsselt: md5()
      $schritt1 md5(uniqid(rand()));
      [...]
      //Das neue Passwort wird verschlüsselt: crypt()
      //Zum Verschlüsseln mit crypt() werden zwei Werte benötigt:
      //Das unverschlüsselte Kennwort und unsere Zufallszahl 

      die crypt-verschlüsselung benutzt neben dem zu verschlüsselnden string noch ein zweites argument, genannt SALT. dieses besteht immer aus zwei zeichen, und wird hier zufällig erzeugt.

      wenn du das gleiche passwort und das gleiche SALT-argument nimmst, wird auch der erzeugte schlüssel jedes mal der gleiche sein.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #18
        Original geschrieben von wahsaga
        nein, wirklich :-)

        könnte das vielleicht hierran liegen:
        PHP-Code:
        //Zunächst wird eine Zufallszahl erstellt: rand()
        //Aus dieser Zufallszahl wird eine eindeutige ID erstellt: uniqid()
        //Diese eindeutige ID wird mit nach MD5-Standard verschlüsselt: md5()
        $schritt1 md5(uniqid(rand()));
        [...]
        //Das neue Passwort wird verschlüsselt: crypt()
        //Zum Verschlüsseln mit crypt() werden zwei Werte benötigt:
        //Das unverschlüsselte Kennwort und unsere Zufallszahl 

        die crypt-verschlüsselung benutzt neben dem zu verschlüsselnden string noch ein zweites argument, genannt SALT. dieses besteht immer aus zwei zeichen, und wird hier zufällig erzeugt.

        wenn du das gleiche passwort und das gleiche SALT-argument nimmst, wird auch der erzeugte schlüssel jedes mal der gleiche sein.
        Moment mal. Das wahr ja nur ein Beispiel. Das Kennwort wird in der htpasswd im Regelfall ja nur einmal angelegt und vielleicht später nochmal verändert.

        Durch rand() --> Randomize Timer, wird eine zufällig Zahl erstellt, die dann durch uniqid() und md5() noch einmal verändert wird. So gibts mit dieser Zeile immer zufällige Zahlen.

        Der zweite Schritt ist ja dann nur noch die Aufbereitung der Zufallszahl, damit sie mit einer zweistelligen Zahl dann auf das alte Kennwort angewandt werden kann.

        Dadurch ergeben sich, dadurch, dass es hexadezimale Zahlen sind, 256 verschiedene Zahlenkombinationen. Das ist jedenfalls die Variante, die mit htpasswd funktioniert.

        Kommentar


        • #19
          Original geschrieben von Tomcat Chriss
          Durch rand() --> Randomize Timer, wird eine zufällig Zahl erstellt, die dann durch uniqid() und md5() noch einmal verändert wird. So gibts mit dieser Zeile immer zufällige Zahlen.

          Der zweite Schritt ist ja dann nur noch die Aufbereitung der Zufallszahl, damit sie mit einer zweistelligen Zahl dann auf das alte Kennwort angewandt werden kann.
          der zweite schritt schneidet von dem im ersten schritt erzeugten string nur die ersten zwei zeichen aus, da für SALT nun mal zwei zeichen länge vorgeschrieben sind.

          dein SALT-argument für crypt() ist jetzt also immer zufällig, deshalb gibt's unterschiedliche ergebnisse.

          wenn du crypt aber mehrmals nacheinander mit dem gleichen SALT-argument aufrufst, wirst du auch jedes mal das gleiche ergebnis bekommen.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #20
            Wieso jedesmal der gleich SALT-Wert? Ich speichere das in meiner Userverwaltung ab. Wenn ich einen neuen User anlege, wird jedesmal durch aufrufen des Scriptes ein neuer SALT-Wert ermittelt.

            Ich habe oben angegebenes Script getestet und mehrfach hintereinander aufgerufen und es kommt jedesmal ein anderes Ergebnis bei in diesem Beispiel gleichbleibendem Ausgangskennwort.

            Das ist doch genau so, wie es sein soll und da ich den Algorithmus nicht selbst erstellt habe, sondern aus einem Script habe, dass genaus das macht, was ich möchte, nämlich die htpasswd füllen, ist das auch verlässlig.

            Bist du der Meinung, das ist nicht sicher genug so? Ich lass mich gerne mit einer anderen Lösung überzeugen. Also her damit

            Kommentar


            • #21
              Original geschrieben von Tomcat Chriss
              Wieso jedesmal der gleich SALT-Wert? Ich speichere das in meiner Userverwaltung ab. Wenn ich einen neuen User anlege, wird jedesmal durch aufrufen des Scriptes ein neuer SALT-Wert ermittelt.
              ja schön, das war doch auch das einzige, was ich dir erklären wollte - weil deine aussage weiter oben so klang, als ob du nicht verstehen würdest, warum dies so ist, oder dächtest, dass dies eine grundlegende eigenschaft von crypt sei.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #22
                Ich würde sagen, ein klassisches Mistverständnis. Also ist das schon eine oder vvielleicht auch die Methode, um die Kennwörter für htpasswd aufzubereiten.

                Alles kloar, Chriss

                Kommentar


                • #23
                  Es ist DIE Methode im die Passwörter für htaccess aufzubereiten!
                  Falls du dir das verschlüsselte Passwort mal genau anschaust,
                  wirst du sehen, das die ersten beiden Zeichen genau der SALT ist.
                  Damit er später beim Login den gleichen Salt benutzen kann, um
                  dann die verschlüsselten Passwörter zu vergleichen.
                  TBT

                  Die zwei wichtigsten Regeln für eine berufliche Karriere:
                  1. Verrate niemals alles was du weißt!


                  PHP 2 AllPatrizier II Browsergame

                  Kommentar


                  • #24
                    ich bräuchte aber ein script das in einer schon bestehenden .htpasswd einen neuen benutzer anlegt und dann auch ein passwort dazuschreib (verschlüsselt) oder aber ein script das einfach ein passwort verschlüsselt z. b. ich schreib in ein feld das passwort und klicke auf weiter und bekomme dann ein verschlüsseltes passwort, dass ich dann nur noch in meine .htpasswd einfügen muss. (benutzernameasswort)

                    Kommentar


                    • #25
                      .htaccess

                      unter Apache ist es vollkommen egal was du als "salt nimmst",
                      ich kann hier nur für CGI sprechen, aber es ist vollkommen egal ob ich die crypt("ab","passwort"); oder crypt("lu","passwort"); aufrufe, soweit ich weiss wird das Passwort nicht zurueckentschluesselt, das heisst apache schaut nach den ersten zwei Buchstaben im Passwort und crypted damit (mit der eingabe des Passwortes vom User, dann vergleicht er die beiden strings miteinander und fertig......

                      Byteandi


                      Es gibt keine dummen Computer
                      Bytenation
                      Zuletzt geändert von TobiaZ; 01.02.2004, 14:26.
                      Sport Dates

                      Kommentar


                      • #26
                        @dominator:

                        versuch doch mal folgendes, um einen neuen Benutzer in die .htpasswd schreibt.

                        PHP-Code:

                        //Diese beiden Variablen kannst du auch problemlos aus einer Datenbank 
                        //auslesen oder über ein vergeschaltetes Eingabeformular füllen lasse.
                        $user "Test";
                        $password "test2";

                        //Jetzt erstellen wir ein verschlüsseltes Kennwort
                        $SALT md5(uniqid(rand()));
                        $SALT substr($SALT02);
                        $password crypt($password$SALT);

                        //Jetzt schreiben wir den User in die Datei
                        $path "/srv/www/htdocs/";
                        $file ".htpasswd";

                        $fileaccess = @fopen($file"a");
                        fwrite($fileaccess"$user:$password\n");
                        fclose($fileaccess); 
                        Das sollte reichen, um einen neuen User in die .htpasswd zu schreiben. Hier´mit kannst Du allerdings nicht überprüfen, ob der User bereits in der Datenbank existiert.

                        Hierfür müsstest Du das File vorher noch einlesen und nach dem Benutzernamen suchen. Das ist allerdings der Part, der mir auch noch fehlt. Genauso fehlt noch ein Part, um Benutzer zu löschen.

                        Kommentar


                        • #27
                          danke des ist eigentlich genau das was ich suche nur ich möchte das man den benutzernamen und das passwort erst über ein textfeld einstellt wenn du verstehst was ich mein

                          Kommentar


                          • #28
                            man kann die .htpasswd-Datei als ".htpasswd.php" speichern und damit kann man über php direkt auf die datenbank zugreifen und die einträge für .htpasswd jedesmal beim zugriff neu generieren. (das passwort muss dann aber 2x in der datenbank drinstehn: 1. für den login über php; 2. der verschlüsselte string für .htpasswd)


                            PHP-Code:
                            // für jeden user:
                            echo $username.":".$userpasswort_htaccess."\n"

                            Kommentar


                            • #29
                              tut mir leid ich kenn mich mit php so gut wie gar nicht aus, könntest du das komplete script mal posten des mit der datenbank versteh ich ncoh nicht ganz

                              Kommentar


                              • #30
                                Original geschrieben von dominator
                                danke des ist eigentlich genau das was ich suche nur ich möchte das man den benutzernamen und das passwort erst über ein textfeld einstellt wenn du verstehst was ich mein
                                du willst uns also gerade sagen, dass du noch nicht einmal in der lage bist, ein stinknormales HTML-formular zu erstellen, und daraus variablen an ein PHP-script zu übergeben.

                                dann lerne bitte grundlagen, anstatt hier die unverschämtheit zu besitzen, für so einen kleinkram nach einem kompletten script zu fragen!
                                I don't believe in rebirth. Actually, I never did in my whole lives.

                                Kommentar

                                Lädt...
                                X