arnd:::: .htaccess und .htpasswd

Hallo,

ich versuche durch eine .htaccess Datei den Zugriff auf ein Verzeichniss und die darin enthaltenen Dateien einzuschränken. Das klappt auch...also die .htaccess funktioniert wenn ich über den Browser auf den Menüpunkt klicke der den jeweiligen Ordner auf meinem server anspricht. Aber irgendwie kann ich mich selbst nicht einloggen. In meiner .htpasswd steht z.B.:

anonym:2RENJrfHwxxSM.

Der User ist also "anonym" und das pw "2RENJrfHwxxSM" - ist das richtig so? Wenn ich mich so versuche einzuloggen geht es nicht. Was haben der Punkt und was der Doppelpunkt zu sagen? Muß ich den un-codierten Namen eingeben als Passwort? Jede Hilfe mehr als willkommen.

Danke schonmal, arnd:::

  1. Tag,

    anonym:2RENJrfHwxxSM.

    Der User ist also "anonym" und das pw "2RENJrfHwxxSM" - ist das richtig so? Wenn ich mich so versuche einzuloggen geht es nicht.

    Kann auch nicht. Das, was hinter dem anonym steht ist zwar das Passwort, aber in seiner verschlüsselten Form. Du musst das unverschlüsselte Passwort eingeben, um dich einzuloggen.

    Viele Grüße,
    Jörg

    1. also...irgendwie klappt das dennoch nicht....ja, ich hab das über

      http://de.selfhtml.org/navigation/suche/index.htm?Suchanfrage=.htaccess

      verschlüsselt. Also nehmen wir mal an der user ist selfhtml und das kennwort ungehasht auch selfhtml (so steht es in meiner .htpasswd die auf meinem server liegt) und man geht auf http://www.schulte-hense.de und versucht über "home"(startseite) auf "CV" zu klicken und man gibt beides ein kommt man dennoch nicht an die seite...

      was mach ich denn da falsch?

      arnd:::

      1. Moin.

        also...irgendwie klappt das dennoch nicht....

        was mach ich denn da falsch?

        Es liegt vielleicht nicht an der .htpasswd sondern an der .htaccess. Dort nämlich steht der Pfad zur .htpasswd.

        Zitat aus Zugriffskontrolle mit .htaccess: Es muss der vollständige absolute Pfadname angegeben werden. Das ist also nicht der Pfad ab dem Wurzelverzeichnis Ihres Web-Projekts, sondern ab dem Wurzelverzeichnis des Server-Rechners. Fragen Sie dazu gegebenenfalls Ihren Provider oder Webmaster!

        Und für Dich ist nicht erkennbar, ab das Passwort falsch war oder die .htpasswd (die auch anders heißen darf) nicht gefunden wurde.

        Gruß Frank

        1. hallo..

          also ich hab iregdnwie das ganze nochmal geändert (user und pw) und jetzte geht es obowhl ich an der technik und syntax nichts gemacht habe...hm...na ja...es geht halt...vielen dank fürs antworten...arnd:::

          Moin.

          also...irgendwie klappt das dennoch nicht....

          was mach ich denn da falsch?
          Es liegt vielleicht nicht an der .htpasswd sondern an der .htaccess. Dort nämlich steht der Pfad zur .htpasswd.

          Zitat aus Zugriffskontrolle mit .htaccess: Es muss der vollständige absolute Pfadname angegeben werden. Das ist also nicht der Pfad ab dem Wurzelverzeichnis Ihres Web-Projekts, sondern ab dem Wurzelverzeichnis des Server-Rechners. Fragen Sie dazu gegebenenfalls Ihren Provider oder Webmaster!

          Und für Dich ist nicht erkennbar, ab das Passwort falsch war oder die .htpasswd (die auch anders heißen darf) nicht gefunden wurde.

          »
          » Gruß Frank

        2. Hi agapanthus,

          Zitat aus Zugriffskontrolle mit .htaccess: Es muss der vollständige absolute Pfadname angegeben werden. Das ist also nicht der Pfad ab dem Wurzelverzeichnis Ihres Web-Projekts, sondern ab dem Wurzelverzeichnis des Server-Rechners. Fragen Sie dazu gegebenenfalls Ihren Provider oder Webmaster!

          Ja, wobei wenn man hier einen nicht absoluten (also relativen) Pfad angibt, wird dieser relativ zum Server Root interpretiert. Soll heißen die Angabe eines relativen Pfades ist möglich, bewirkt aber eben nicht das, was viele erwarten (nämlich relativ zum Document Root).

          MfG, Dennis.

  2. Hi!

    anonym:2RENJrfHwxxSM.

    Der User ist also "anonym" und das pw "2RENJrfHwxxSM" - ist das richtig so? Wenn ich mich so versuche einzuloggen geht es nicht. Was haben der Punkt und was der Doppelpunkt zu sagen? Muß ich den un-codierten Namen eingeben als Passwort? Jede Hilfe mehr als willkommen.

    Wie du bereits richtig erkannt hast, ist hier dein Benutzername anonym, das Passwort jedoch liegt hier in seiner verschlüsselten Form vor, d.h. es wurde von dir ein Passwort gewählt und dieses dann (meist) mittels crypt() verschlüsselt. Demnach darfst du nicht diese verschlüsselte Form eingeben, sondern das echte, von dir gewählte.

    Bei der Authentifizierung wird dann das von dir eingegebene Passwort abermals mittels crypt() (bzw. mit einem dem von dir bei der Erstellung der .htpasswd-Datei gewählten Hash-Verfahren) mit dem in der .htpasswd abgespeicherten Hash verglichen. Sind diese identisch, so bekommst du Zugang zu deinem abgesicherten Bereich.

    Wie das ganze genau funktioniert, hat Christian Seiler bereits einmal sehr ausführlich und anschaulich erläutert: http://forum.de.selfhtml.org/archiv/2005/5/t108606/#m676671

    Grüße,
    Fabian St.

  3. Hi,

    Sollte der Apache auf Windows laufen: crypt-Verschlüsselung wird unter Windows nicht unterstützt.
    Schreib das Paßwort im Klartext rein oder verwende eine der anderen Verschlüsselungsmöglichkeiten (z.B. Apache-md5)

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo Andreas,

      Sollte der Apache auf Windows laufen: crypt-Verschlüsselung wird unter Windows nicht unterstützt.

      Wie meinst du das? Ich glaube, du irrst dich.
      Ich betreibe hier zuhause zum Testen nämlich tatsächlich einen Apache 2.049 unter Windows 2000 und habe die User und Kennwörter mit dem mitgelieferten Tool htpasswd.exe eingetragen. Und die Kennwörter in der .htpasswd *sind* alle verschlüsselt. Und ja, mein HTTP-AUTH funktioniert auch mit den eingetragenen Usern und Kennwörtern. :-)

      So long,

      Martin

      1. Hi,

        Sollte der Apache auf Windows laufen: crypt-Verschlüsselung wird unter Windows nicht unterstützt.
        Wie meinst du das? Ich glaube, du irrst dich.

        Laut Dokumentation hat sich nichts daran geändert, daß Apache unter Windows die crypt-Verschlüsselung nicht unterstützt.

        Ich betreibe hier zuhause zum Testen nämlich tatsächlich einen Apache 2.049 unter Windows 2000 und habe die User und Kennwörter mit dem mitgelieferten Tool htpasswd.exe eingetragen. Und die Kennwörter in der .htpasswd *sind* alle verschlüsselt.

        "verschlüsselt" ist was anderes als "crypt-verschlüsselt".
        Sonst hätte der Teil des nächsten, von Dir nicht zitierten, Satzes "oder verwende eine der anderen Verschlüsselungsmöglichkeiten" ja wohl keinen Sinn.

        Wenn ich hier bei meinem Apache 2.0.54 das htpasswd.exe ausführe, wird automatisch die Apache-md5-Verschlüsselung benutzt, selbst wenn ich mit -d explizit die crypt-Verschlüsselung anfordere:

        D:\temp>htpasswd -b -c -d d:\temp\htfile bla blubb
        Automatically using MD5 format.
        Adding password for user bla

        D:\temp>cat d:\temp\htfile
        bla:$apr1$6g0.....$EYw230yFIygAErz50gTAO1

        sieht auch nicht wirklich nach crypt-Verschlüsselung aus (crypt-Paßworte bestehen aus [max.?] 13 Zeichen, $ ist nicht erlaubt)

        Auf http://httpd.apache.org/docs/2.0/programs/htpasswd.html#options steht auch, daß der Apache unter Windows die crypt-Verschlüsselung nicht unterstützt.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Hallo,

          "verschlüsselt" ist was anderes als "crypt-verschlüsselt".

          Oh. Hmm...
          Ich hatte angenommen, dass "crypt" hier als Sammelbegriff für jegliche Verschlüsselungen verwendet wird.

          Sonst hätte der Teil des nächsten, von Dir nicht zitierten, Satzes "oder verwende eine der anderen Verschlüsselungsmöglichkeiten" ja wohl keinen Sinn.

          Ja stimmt, der Halbsatz kam mir auch sehr merkwürdig vor. Jetzt bekommt er tatsächlich einen Sinn.

          Auf http://httpd.apache.org/docs/2.0/programs/htpasswd.html#options steht auch, daß der Apache unter Windows die crypt-Verschlüsselung nicht unterstützt.

          Okay, dann ist das eben so.
          Verschlüsselungen sind für mich eh ein verhasstes Thema...

          Btw, auf der von dir verlinkten Seite steht auch, dass ich mit htpasswd -p die Passwörter unverschlüsselt speichern kann. Verstehe ich das richtig? Das wäre ja mal wieder ein Schritt zu weniger Paranoia. Wenigstens auf dem eigenen Testserver!

          So long,

          Martin

          1. Hi,

            Btw, auf der von dir verlinkten Seite steht auch, dass ich mit htpasswd -p die Passwörter unverschlüsselt speichern kann.

            Unter gewissen Voraussetzungen, ja (Windows, Netware and TPF).

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            Schreinerei Waechter
            Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    2. Hi MudGuard,

      ... eine der anderen Verschlüsselungsmöglichkeiten (z.B. Apache-md5)

      Hm, ich PHP lässt crypt() ja nur 8 Zeichen zu (bzw. weitere werden ignoriert) - User bei einer HTTP Basic Authentifizierung können also nur Passwörter mit maximal 8 Zeichen wählen.

      Deshalb überlege ich gerade, ob ich die Passwörter md5() verschlüsseln soll, aber das von dir bereits erwähnte "Apache-md5", sowie folgender Satz der Doku machen mich stutzig:

      htpasswd encrypts passwords using either a version of MD5 modified for Apache, or the system's crypt() routine

      Was macht der Apache da anders an der 5 Bit Verschlüsselung? Was ist da "modified"? Kann ich mit PHP auch solche verschlüsselten Passwörter auf "Apache-md5" Ebene erzeugen?

      MfG, Dennis.

      --
      Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
      Man sollte nie aufhören zu fragen (Albert Einstein)
      ... aber natürlich erst, nachdem man sämliche FAQ's und Archive durchgelesen hat :-P
      1. 你好 Dennis,

        ... eine der anderen Verschlüsselungsmöglichkeiten (z.B. Apache-md5)

        Hm, ich PHP lässt crypt() ja nur
        8 Zeichen zu (bzw. weitere werden ignoriert) - User bei einer HTTP Basic
        Authentifizierung können also nur Passwörter mit maximal 8 Zeichen wählen.

        Das stimmt nicht. Was die crypt-Implementation kann hängt vom System ab.
        Steht aber auch auf der Seite, die du verlinkt hast; es ist inzwischen
        sogar recht häufig, dass crypt kein DES mehr macht, sondern ein MD5, SHA-1
        oder sonstwas in der Richtung.

        再见,
         克里斯蒂安

        --
        Das Sein entsteht aus dem Nicht-Sein.
        http://wwwtech.de/
        1. Hi Christian,

          Das stimmt nicht. Was die crypt-Implementation kann hängt vom System ab.
          Steht aber auch auf der Seite, die du verlinkt hast; es ist inzwischen
          sogar recht häufig, dass crypt kein DES mehr macht, sondern ein MD5, SHA-1
          oder sonstwas in der Richtung.

          Das heißt, ich kann ruhig alles mit crypt verschlüsseln, wichtig ist nur,
          dass es auf dem System (und damit auch mit der Implementation) "verschlüsselt"
          ist, auf dem es auch für die Authentifizierung genutzt werden soll?

          Es würde also erst problematisch, wenn ich die Passwörter auf einem System
          mit Implemention A crypten würde und die Hashs in die .htusers Datei von einem
          anderen System mit Implementation B schreiben würde?

          MfG, Dennis.

          --
          Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
          Denn wer 'ne Blacklist hat, muss halt daran denken, dass er manches nicht sieht... und vor dem posten die Realitaet einschalten. (Swen Wacker)
          1. 你好 Dennis,

            Das heißt, ich kann ruhig alles mit crypt verschlüsseln, wichtig ist nur,
            dass es auf dem System (und damit auch mit der Implementation)
            "verschlüsselt" ist, auf dem es auch für die Authentifizierung genutzt
            werden soll?

            Jupp, so in der Richtung. Die freien Systeme benutzen in aktuellen
            Versionen soweit ich weiss keins mehr die DES-Implementation und die
            8-Zeichen-Begrenzung gilt kaum noch.

            Es würde also erst problematisch, wenn ich die Passwörter auf einem
            System mit Implemention A crypten würde und die Hashs in die .htusers
            Datei von einem anderen System mit Implementation B schreiben würde?

            Jor.

            再见,
             克里斯蒂安

            --
            Wer sich zu überschwänglich freut, wir später Grund zum Weinen haben.
            http://wwwtech.de/
            1. Hi Christian,

              Jupp, so in der Richtung. Die freien Systeme benutzen in aktuellen
              Versionen soweit ich weiss keins mehr die DES-Implementation und die
              8-Zeichen-Begrenzung gilt kaum noch.

              Hm, es gibt aber nur entwerder 8-Zeichen Begrenzung oder gar keine
              Begrenzung, oder?

              Folgense müsste also funktionieren:

              if(crypt("12345678", "ab") == crypt("123456789", "ab"))  
              {  
                echo "Dieses System erlaubt nur 8 Zeichen für crypt().";  
              }
              

              MfG, Dennis.

              --
              Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
              Auf viele Fragen weiß auch Wikipedia eine Antwort.
              1. Hi,

                Folgense müsste also funktionieren:

                if(crypt("12345678", "ab") == crypt("123456789", "ab"))

                {
                  echo "Dieses System erlaubt nur 8 Zeichen für crypt().";
                }

                  
                Soweit ich das überprüft habe, funktioniert das einwandfrei - wobei  
                man das eigentlich auch durch ein Abfragen der [entsprechenden Konstanten](http://de.php.net/manual/en/function.crypt.php)  
                machen können müsste, aber warum es einfach machen, wenn's auch  
                kompliziert geht ;-)  
                  
                  
                MfG, Dennis.
                
                -- 
                Mein SelfCode: [ie:{ fl:( br:> va:) ls:\[ fo:) rl:( n4:# ss:) de:\] js:| ch:{ sh:| mo:} zu:|](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%3E+va%3A%29+ls%3A%5B+fo%3A%29+rl%3A%28+n4%3A%23+ss%3A%29+de%3A%5D+js%3A%7C+ch%3A%7B+sh%3A%7C+mo%3A%7D+zu%3A%7C)  
                  
                Ich finde, der IE ist eine super Software. Nur eben nicht als Browser. ([Manuel B.](http://forum.de.selfhtml.org/?t=109586&m=686245))
                
            2. Hallo Christian,

              Jupp, so in der Richtung. Die freien Systeme benutzen in aktuellen
              Versionen soweit ich weiss keins mehr die DES-Implementation und die
              8-Zeichen-Begrenzung gilt kaum noch.

              Bei Debian wirst Du bei der Installation gefragt, ob Du aus Kompabilitätgründen das alte crypt() verwenden willst.

              Viele Grüße,
              Christian

      2. Hi,

        Deshalb überlege ich gerade, ob ich die Passwörter md5() verschlüsseln soll,

        nö.

        aber das von dir bereits erwähnte "Apache-md5", sowie folgender Satz der Doku machen mich stutzig:

        Richtig, Apache verwendet ein modifiziertes md5.

        Was macht der Apache da anders an der 5 Bit Verschlüsselung? Was ist da "modified"?

        Was die genau modifiziert haben, weiß ich nicht.

        Kannst Du aber rausfinden. Sowohl PHP als auch Apache sind Open Source ...

        Kann ich mit PHP auch solche verschlüsselten Passwörter auf "Apache-md5" Ebene erzeugen?

        Weiß ich nicht.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      3. Hallo Dennis,

        Deshalb überlege ich gerade, ob ich die Passwörter md5() verschlüsseln soll, aber das von dir bereits erwähnte "Apache-md5", sowie folgender Satz der Doku machen mich stutzig:

        htpasswd encrypts passwords using either a version of MD5 modified for Apache, or the system's crypt() routine

        Was macht der Apache da anders an der 5 Bit Verschlüsselung? Was ist da "modified"? Kann ich mit PHP auch solche verschlüsselten Passwörter auf "Apache-md5" Ebene erzeugen?

        Unter Perl kann man das mit dem Modul Crypt::PasswdMD5 bzw. unter Python mit md5crypt.py machen. Ob es für PHP da schon etwas Fertiges gibt, weiß ich nicht, aber man kann ja versuchen, das Perl- bzw. Python-Modul zu übersetzen.

        Viele Grüße
          Patrick Canterino

        --
        "Ich glaube nicht, dass es irgendetwas auf der ganzen Welt gibt, was man in Berlin nicht lernen könnte - außer der deutschen Sprache!" (Mark Twain)
        1. Hi Patrick,

          Unter Perl kann man das mit dem Modul Crypt::PasswdMD5 [...] machen.

          Ja, wenn ich das richtig gesehen habe, dann gibt es da eben auch zwei Funktionen:

          • apache_md5_crypt()
          • unix_md5_crypt()

          Und die in PHP ist eben von UNIX - da gibts wohl nix für den Apachen :-(

          Ob es für PHP da schon etwas Fertiges gibt, weiß ich nicht, aber man kann ja versuchen, das Perl- bzw. Python-Modul zu übersetzen.

          Ich habe es jetzt gerade mal noch mit SHA1 probiert - aber da scheint auch eine "falsche" Implementation in PHP zu sein, das gleich Passwort mit PHP "gesha1t" (*g*) sieht komplett anders aus, als selbiges Passwort mit der htpasswd verschlüsselt...

          Wenn ich keine einfache[tm] Methode finde das zu lösen, muss ich wohl Übersetzen probieren...

          MfG, Dennis.

          --
          Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
          Krieg ist Gottes Art, den Amerikanern Geographie beizubringen. (Häfft)
          1. Hi,

            • apache_md5_crypt()

            Wenn ich keine einfache[tm] Methode finde das zu lösen, muss ich wohl Übersetzen probieren...

            Habe mir jetzt gerade obige Funktion mal angeschaut - besteht eigentlich nur aus diesem Code:

            sub apache_md5_crypt {  
             # change the Magic string to match the one used by Apache  
             local $Magic = q/$apr1$/;  
              
             unix_md5_crypt(@_);  
            }
            

            Es scheint grade in der dritten Zeile zu liegen - doch genau die verstehe ich nicht. Da scheint ein bestimmter Wert gesetzt zu werden, doch welcher Wert? und auf was?

            Diesen Wert scheint unix_md5_crypt dann im weiteren Verlauf zu verarbeiten.

            MfG, Dennis.

            --
            Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
            Werbung ist der Versuch, das Denkvermögen des Menschen so lange außer Kraft zu setzen, bis er genügend Geld ausgegeben hat. (Ambrose Bierce)
            1. Hallo Dennis,

              Ja, wenn ich das richtig gesehen habe, dann gibt es da eben auch zwei Funktionen:

              • apache_md5_crypt()
              • unix_md5_crypt()

              Und die in PHP ist eben von UNIX - da gibts wohl nix für den Apachen :-(

              Nein, unix_md5_crypt() erzeugt etwas ganz anderes als das normale MD5. Es ist eine neue Version des alten crypt(), die auf MD5 basiert und ebenfalls ein Salt und zusätzlich noch einen "Magic String" verwendet.
              Wie sie genau funktioniert, ist mir ehrlich gesagt ein wenig zu hoch.

              Habe mir jetzt gerade obige Funktion mal angeschaut - besteht eigentlich nur aus diesem Code:

              sub apache_md5_crypt {

              change the Magic string to match the one used by Apache

              local $Magic = q/$apr1$/;

              unix_md5_crypt(@_);
              }

              
              >   
              > Es scheint grade in der dritten Zeile zu liegen - doch genau die verstehe ich nicht. Da scheint ein bestimmter Wert gesetzt zu werden, doch welcher Wert? und auf was?  
                
              Da wird ganz einfach der Magic String für unix\_md5\_crypt() auf das vom Apache verwendete $apr1$ gesetzt.  
                
              Ich habe allerdings gerade etwas in der [Beschreibung zu crypt() im PHP-Handbuch](http://www.php.net/crypt) entdeckt: Wenn man ein Salt angibt, das mit "$1$" beginnt und anschließend irgendetwas dran hängt, scheint die MD5-Version von crypt() verwendet zu werden. Und das Ergebnis stimmt mit dem von unix\_md5\_crypt() aus Crypt::PasswdMD5 überein! Allerdings habe ich es noch nicht geschafft, in den dazu zu bringen, den Magic String vom Apache zu verwenden.  
                
              Viele Grüße  
                Patrick Canterino
              
              -- 
              "In Deutschland löst man ein Problem dadurch, indem man solange darüber diskutiert, bis keiner mehr weiß, worum es eigentlich ging." (Ich selbst)
              
              1. Hi Patrick,

                Nein, unix_md5_crypt() erzeugt etwas ganz anderes als das normale MD5. Es ist eine neue Version des alten crypt(), die auf MD5 basiert und ebenfalls ein Salt und zusätzlich noch einen "Magic String" verwendet.

                Na ja, vielleicht kann man das irgendwann mal in PHP implementieren...

                Ich habe allerdings gerade etwas in der Beschreibung zu crypt() im PHP-Handbuch entdeckt: Wenn man ein Salt angibt, das mit "$1$" beginnt und anschließend irgendetwas dran hängt, scheint die MD5-Version von crypt() verwendet zu werden. [...] Allerdings habe ich es noch nicht geschafft, in den dazu zu bringen, den Magic String vom Apache zu verwenden.

                Auch ich habe zwischenzeitlich noch verschiedenes ausprobiert, um da den Magic String verwenden zu lassen - leider erfolglos. Vielleicht geht es auch gar nicht (bzw. kann gar nicht gehen), weil die in PHP implementierte Version von crypt zu alt ist, um den Magic String zu kennen?

                MfG, Dennis.

                --
                Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
                Der erste Schweizer ist entstanden, als ein Russe versucht hat holländisch zu sprechen. (Thomas Gottschalk)
                1. 你好 Dennis,

                  […] weil die in PHP implementierte Version von crypt zu alt ist, um den
                  Magic String zu kennen?

                  PHP implementiert keine eigene Version von crypt(). PHP benutzt die
                  Bibliotheks-Funktion crypt(3).

                  再见,
                   克里斯蒂安

                  --
                  Neues Block: „ähm Jeena kennt Wayne?“ | Savage Circus: Dreamland Manor
                  Echte Hacker benutzen Aexte. (Thomas Walter in de.org.ccc)
                  http://wwwtech.de/
                  1. Hi Christian,

                    PHP implementiert keine eigene Version von crypt(). PHP benutzt die
                    Bibliotheks-Funktion crypt(3).

                    Ok, dann formuliere ich es eben so: Das PHP "Interface" zu der
                    Bibliotheks-Funktion crypt(3) ist veraltet und bietet deshalb (noch)
                    keine Möglichkeit, einen Magic String zu übergeben ;-)

                    MfG, Dennis.

                    --
                    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
                    Wer die FAQ gelesen hat, ist klüger! ... und weiß wie man Links macht ;-)
        2. Hi!

          Was macht der Apache da anders an der 5 Bit Verschlüsselung? Was ist da "modified"? Kann ich mit PHP auch solche verschlüsselten Passwörter auf "Apache-md5" Ebene erzeugen?

          Unter Perl kann man das mit dem Modul Crypt::PasswdMD5 bzw. unter Python mit md5crypt.py machen. Ob es für PHP da schon etwas Fertiges gibt, weiß ich nicht, aber man kann ja versuchen, das Perl- bzw. Python-Modul zu übersetzen.

          Seit heute gibt es durch die Arbeit von Dennis (und einiger Unterstützung durch mich ;-)) auch eine Implementation in PHP: http://tutorial.riehle-web.com/scripts/show.php?datei=md5crypt-1.0.lib Größenteils wurde hierbei die Python-Version zum Vorbild genommen. Das Skript ist sowohl unter PHP 4 als auch unter PHP 5 lauffähig, wobei unter PHP 5 der Umweg über das pack('H*', md5($var)) weggelassen werden kann und man schlicht md5($var, TRUE) schreiben kann, da dieser Parameter neu hinzugekommen ist und für die Ausgabe des md5-Hashes in der »raw«-Version zuständig ist und nicht - wie sonst üblich - in der 32-stelligen hexadezimalen Form.

          Vielleicht kann es der eine oder andere von euch brauchen :-)

          Grüße,
          Fabian St.

          1. Hi Fabian,

            Seit heute gibt es durch die Arbeit von Dennis (und einiger Unterstützung durch mich ;-)) auch eine Implementation in PHP: md5crypt-1.0.lib.php

            Jetzt war ich doch gerade in diesem Moment dabei, ebenfalls ein Posting zu schreiben, was diese Information enthalten sollte, lediglich durch das Thread-Abonnemont habe ich von deinem Posting erfahren. ;-)

            Einen Absatz aus meinem angefangenen Posting möchte ich allerdings nicht unter den Tisch fallen lassen:

            Allerdings wäre das wohl ohne die großartige Hilfe von Fabian St. nie
              fertig geworden - er hat am Ende auch den „finalen Fehler” gefunden.
              An dieser Stelle noch mal Danke dafür :-)

            Größenteils wurde hierbei die Python-Version zum Vorbild genommen. Das Skript ist sowohl unter PHP 4 als auch unter PHP 5 lauffähig, wobei unter PHP 5 der Umweg über das pack('H*', md5($var)) weggelassen werden kann und man schlicht md5($var, TRUE) schreiben kann, da dieser Parameter neu hinzugekommen ist und für die Ausgabe des md5-Hashes in der »raw«-Version zuständig ist und nicht - wie sonst üblich - in der 32-stelligen hexadezimalen Form.

            Vielleicht sei auch noch mal darauf hingewiesen, dass pack("C", "...") in PHP nicht das Gleiche zu machen scheint, wie in Perl - das war nämlich mein erster (nicht funktionierender) Lösungsweg. Erst das weglassen von pack (wie im Phyton Script) hat zum Erfolg geführt.

            Der IHMO interessanteste Anwendungszweck ist die Funktion md5crypt_apache("password") - diese Funktion liefert ein gecryptetes Passwort zurück, wie man es in die .htpasswd Datei eines Apachen schreiben kann. Der Vorteil gegenüber dem alten Crypt oder der Methode die Passwörter als Plaintext in die Datei zu schreiben: Das auf MD5 Basis gecryptete Passwort funktioniert sowohl unter Windows als auch unter Linux.

            MfG, Dennis.

            --
            Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
            Das Leben ist kein Warenhaus - es nimmt nichts zurück. (Anette Louisan)