Ankündigung

Einklappen
Keine Ankündigung bisher.

Verschlüsselung mit bcrypt

Einklappen

Neue Werbung 2019

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

  • Verschlüsselung mit bcrypt

    Hallo, ich habe eine allgemeine Frage:
    ich versuche mein Login jetzt mit bcrypt zu verschlüsseln. Im Moment steht mein Passwort im Klartext in der MySQL Datenbank (das bleibt natürlich nicht so, ich weiß nur nicht wie ich anfangen muss).
    Wie lang und von welchem Typ sollte das Passwort in der Datenbank sein?
    Varchar(60)?

    Und wie kann ich das Passwort mit PHP verschlüsseln / entschlüsseln?
    Ich habe versuch tmir das durchzulesen, steig da aber noch nicht so ganz dahinter.

    Was ich bisher habe:
    login.php
    PHP-Code:
    <?php
    include '../include/includes.php';
    include 
    '../include/header.php';
    ?>

    <form role="form" method="post">
        <div class="form-group">
            <input type="text" class="form-control" name="username" required autofocus>
            <input type="password" class="form-control" name="password" required>
        </div>
        <div class="form-group">
            <input type="submit" class="btn btn-success btn-block" name="submit">
        </div>
    </form>

    <?php
    session_start
    ();
    if (isset(
    $_POST['submit'])) {
        
    $database = new Database();
        
    $database->query("SELECT id, username, password, email FROM users WHERE username = :username AND password = :password");
        
    $database->bind(':username'$_POST['username']);
        
    $database->bind(':password'$_POST['password']);
        
    $stmt $database->resultset();
        foreach (
    $stmt as $row) {
            echo 
    $row['username'] . '<br>' $row['email'];
        }
        if (
    $stmt) {
            
    $user_id $row['id'];
            
    $_SESSION['user_id'] = $user_id;
        } else {
            echo 
    NOLOGIN;
        }
    }

    include 
    '../include/footer.php';
    Wie prüfe ich nun hier auf das Passwort ab?

    Vielen Dank euch schonmal


  • #2
    hol das passwort aus der Datenbank und übergib die eingabe und den datenbank hash an [man]password_verify[/man].

    Das was du in der Datenbank speicherst ist das produkt aus password_hash() und dem gesetzten Passwort.
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      Aber das Passwort muss doch in einem bestimmten format in der Datenbank stehen oder nicht?

      Kommentar


      • #4
        Ja, als bcrypted hash in deinem Fall, den bekommst du wenn du das "plain password" durch password_hash jagst.
        [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

        Kommentar


        • #5
          ich hab jetzt meine Tabelle auf varchar(60) gestellt und mir mein Passwort über
          PHP-Code:
          echo password_hash("meinpasswort"PASSWORD_BCRYPT)."\n"
          verschlüsseln lassen. Das habe ich nun in der Datenbank eingetragen.
          in meinem Fall: $2y$10$uiMqhjTe49MnyLR3lMDN4e4A.fdw5Pvci4agMVSo/TvdpFgTSjBw2

          Wie kann ich da nun abfragen?

          Kommentar


          • #6
            Zitat von tr0y Beitrag anzeigen
            hol das passwort aus der Datenbank und übergib die eingabe und den datenbank hash an [man]password_verify[/man].

            Das was du in der Datenbank speicherst ist das produkt aus password_hash() und dem gesetzten Passwort.
            Das.
            [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

            Kommentar


            • #7
              Sorry aber ich versteh das nicht. Die Hashes ändern sich doch jedesmal. Wie soll ich da einen in die Datenbank eintragen?

              Kommentar


              • #8
                Du nutzt password_verify um das in der Datenbank Stehende mit dem gerade Eingegebenen zu vergleichen.
                Standards - Best Practices - AwesomePHP - Guideline für WebApps

                Kommentar


                • #9
                  Das sich das produkt von password_hash ändert ist mir bewusst, aber nicht von belang, da diese methode nicht beim vergleichen der passwörter genutzt wird.
                  [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                  Kommentar


                  • #10
                    Okay in meiner DB steht im PW Feld nun: $2y$10$8axWFPGGysiGccJ3iwOKheWDrlm.PkLR3ApKj9wjGH8 CahPT6DT2a
                    Ergebnis aus meinem passwort und password_hash();

                    Wie kann ich das aber nun in meine Abfrage einbauen?

                    PHP-Code:
                    if (isset($_POST['submit'])) {
                        
                    $database = new Database();
                        
                    $database->query("SELECT id, username, password, email FROM users WHERE username = :username AND password = :password");
                        
                    $database->bind(':username'$_POST['username']);
                        
                    $database->bind(':password'password_verify($_POST['password'], '???'));
                        if (
                    $stmt) {
                            
                    $user_id $row['id'];
                            
                    $_SESSION['user_id'] = $user_id;
                        } else {
                            echo 
                    NOLOGIN;
                        }

                    Danke euch soweit schon mal.

                    Kommentar


                    • #11
                      Indem du ein select durchführst das das passwort abholt für den betreffenden username. Diese Zeile dann ausliest und das Passwort in eine variable packst um es dann zusammen mit dem übertragenen Passwort an password_verify zu übergeben.

                      Wenn ich das jetzt noch detaillierter Beschreiben soll muss ich dir das aufmalen, mit wachsmaler, bekleidet mit einer Mickey Mouse Schürze, das willst du nicht.
                      [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                      Kommentar


                      • #12
                        Guck dir das mal an -> http://www.gregboggs.com/php-blowfis...ted-passwords/

                        Kommentar


                        • #13
                          Zitat von der_robert Beitrag anzeigen
                          besser nicht, deprecated.
                          [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                          Kommentar


                          • #14
                            Zitat von tr0y
                            Wenn ich das jetzt noch detaillierter Beschreiben soll muss ich dir das aufmalen, mit wachsmaler, bekleidet mit einer Mickey Mouse Schürze, das willst du nicht.
                            Vielleicht als nächsten Avatar

                            @TE: Schau doch einfach mal ins Manual: password_verify
                            Da sind auch bunte Beispiele drin.
                            Competence-Center -> Enjoy the Informatrix
                            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                            Kommentar


                            • #15
                              Hier mein Code
                              PHP-Code:
                              session_start();
                              if (isset(
                              $_POST['submit'])) {
                                  
                              $dbh = new Database();
                                  
                              $dbh->query("SELECT username, password FROM users WHERE username = :username");
                                  
                              $dbh->bind(':username'$_POST['username']);
                                  
                              $row $dbh->single();
                                  
                              $hash password_hash($row['password'], PASSWORD_BCRYPT);
                                  
                                  
                              $database = new Database();
                                  
                              $database->query("SELECT id, username, password FROM users WHERE username = :username AND password = :password");
                                  
                              $database->bind(':username'$_POST['username']);
                                  
                              $database->bind(':password'password_verify($_POST['password'], $hash));
                                  
                              $stmt $database->single();
                                  if (
                              $stmt) {
                                      
                              //$user_id = $stmt['id'];
                                      //$_SESSION['user_id'] = $user_id;
                                      
                              echo "okay";
                                  } else {
                                      echo 
                              NOLOGIN;
                                  }

                              Leider prüft er anscheinend nicht mehr und akzeptiert jedes Passwort

                              EDIT: Er akzeptiert jetzt jedes, bis auf das richtige Passwort ?!

                              Kommentar

                              Lädt...
                              X