Ankündigung

Einklappen
Keine Ankündigung bisher.

Bug in crypt() oder unbekannte Funktionsweise?

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Bug in crypt() oder unbekannte Funktionsweise?

    Hallo Community,

    ich stehe ich vor einer Frage, die mich etwas beunruhigt. Es dreht sich um die Kombination aus crypt() und password_verify():

    PHP-Code:
    // Erstellen eines (10 Zeichen) Salts
        
    echo 'salt: ' $salt = \core\classes\HELPER::generateRandomString(10);
        echo 
    '<br />';
    // Hashen des Passworts mit oben generiertem Salt
        
    echo 'hash: ' $hash crypt('Cooin(12',$salt); 
        echo 
    '<br />';

    // Vergleich des Passwortes mit obigem Hash
    /* 1:*/    
    echo 'check: ' password_verify('Cooin(12'$hash); // ergibt true
    /* 2:*/    
    echo 'check: ' password_verify('Cooin(12aspin3in3'$hash); // ergibt auch true 

    Wie oben zu sehen wird also ein Passwort gehasht und anschließend überprüft (1: ).
    So weit, so gut. Nun sieht man aber in (2: ), dass auch ein nicht identisches Passwort als korrekt eingestuft wird. Korrekter: Die Zeichenkette hinter "Cooin(12" ist beliebig, alles wird akzeptiert.


    Nun meine Frage: Schneidet crypt() das Passwort ab einer gewissen Länge ab?! Das wäre die einzige mir schlüssig erscheinende Erklärung, finden konnte ich dazu bisher aber nichts.


    Vielen Dank für alle Hinweise im Voraus!

    Grüße
    alve

  • #2
    Hast du es schon mit password_hash() statt crypt() versucht?

    passwortd_verify() braucht laut Doku eine Hash von password_hash() http://php.net/manual/de/function.password-verify.php

    Siehe auch: http://php.net/manual/en/faq.passwor...s.bestpractice
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Laut Manual von password_hash() wird auch crypt unterstützt (was ja offensichtlich auch funktioniert). Leider muss ich crypt() verwenden, da mod_Auth_MySQL nur CRYPT_DES unterstützt. Somit bleibt mir nur diese Möglichkeit.

      Kommentar


      • #4
        Funktioniert es vielleicht, wenn du es gem. dem Beispiel 1 hier machst? http://php.net/manual/de/function.cr...crypt-examples
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Das ist weder ein Bug noch unbekannt, crypt() nutzt seit jeher nur 8 Zeichen bei DES, um mit diversen anderen Sprachen kompatibel zu sein/bleiben.
          Den 10-stelligen Salt kannst du dir auch sparen, mehr als die ersten zwei Stellen werden eh nicht verwendet.
          VokeIT GmbH & Co. KG - VokeIT-oss @ github

          Kommentar


          • #6
            Das mit dem Salt wusste ich (ärgert mich zwar, ist aber nicht zu ändern). Das mit den acht Zeichen für DES ist mir neu. Danke für die Aufklärung!
            PS: Mit "unbekannte Funktionsweise" meinte ich eher "mir unbekannte Funktionsweise". Unwissen geklärt, Thema erledigt. Nochmals herzlichen Dank!

            Kommentar

            Lädt...
            X