razor: Mit password() ein Passwort eingeben und ausgeben?

Gallo!

was genau bewirkt "PASSWORD()" in mySQL? Ich hab echt in der Doku nachgesehen und habs nicht ganz kapiert.
Mit PASSWORD('passwort') verschlüssle ich doch ein Passwort, oder? Wie aber bekomme ich es jetzt wieder unverschlüsselt raus, bzw. wie kann ich dann schauen, ob Benutzername und Passwort richtig sind, wenn sich jemand einloggen will?
Ich hoffe ihr könnt mir das erklären.

greetz, razor

  1. Gallo!

    Ich mache das immer mit der PHP-Funktione md5()(http://www.php.net/manual/de/function.md5.php), da es sich hierbei um eine Einweg-Verschlüselung handelt, kannst Du nicht mehr an das Passwort kommen, aber Du kannst das mit md5 verschlüsselte Passwort in mysql speichern, und dann später das in das logim-Fomrular eingegebene Passwort ebenfalls verschlüsseln und erst dann vergleichen!

    Grüß
    Andreas

    1. Das heisst ich kann also sowohl mit PASSWORD() in mySQL als auch mit md5() in PHP nur verschlüsseln, es gibt aber für beide keinen Entschlüsselungsmechanismus mehr?

      Das Hauptproblem dabei ist nämlich, dass ich dann niemandem sein Passwort schicken kann, wenn er es vergessen hat.

      PS: ergibt die Verschlüsselung von immer der gleichen Zeichenfolge auch verschlüsselt sicher wieder die gleiche Zeichenfolge?

      1. hallo,

        Das heisst ich kann also sowohl mit PASSWORD() in mySQL als auch mit md5() in PHP nur verschlüsseln, es gibt aber für beide keinen Entschlüsselungsmechanismus mehr?

        bei md5 ist das auf jeden fall richtig

        Das Hauptproblem dabei ist nämlich, dass ich dann niemandem sein Passwort schicken kann, wenn er es vergessen hat.

        stimmt, aber dafür kann auch wirklich niemand die passwörter auspionieren. du kannst stattdessen das passwort auf eine zufällige
        zeichenfolge setzen und die dem user schicken.

        PS: ergibt die Verschlüsselung von immer der gleichen Zeichenfolge auch verschlüsselt sicher wieder die gleiche Zeichenfolge?

        ja ergibt sie

        schöne grüße
        FICHTL

        1. und wie machen es die seiten, die passwörter schicken, wenn man sie vergißt? Solche Seiten findet man ja eigentlich sehr viel häufiger.

          1. und wie machen es die seiten, die passwörter schicken, wenn man sie vergißt? Solche Seiten findet man ja eigentlich sehr viel häufiger.

            Die verschlüsseln die Passwörter nicht, meist übertragen gerade diese Seiten die Passwörter noch nichtmal per SSL. Wenn das viele machen muß das nicht gut sein, und schon gar nicht sicher, da sicherer immer unbequemer ist!
            Grüß
            Andreas

      2. Hi!

        Das heisst ich kann also sowohl mit PASSWORD() in mySQL als auch mit md5() in PHP nur verschlüsseln, es gibt aber für beide keinen Entschlüsselungsmechanismus mehr?

        Genau so ist es! ( bei mysql bin ich nicht 100%ig sicher, aber ich denke schon)

        Das Hauptproblem dabei ist nämlich, dass ich dann niemandem sein Passwort schicken kann, wenn er es vergessen hat.

        Das ist dumm, aber anders wäre es wohl eine große Sicherheitslücke, wenn man Passwörter einfach aus der DB zurück generieren könnte, oder? Ich mache das so, das ich den Leuten dann halt ein neues Passwort schicke!

        PS: ergibt die Verschlüsselung von immer der gleichen Zeichenfolge auch verschlüsselt sicher wieder die gleiche Zeichenfolge?

        Bei md5() schon, bei crypt() nicht, aber das funktioniert soweit ich weiß trotzdem.

        Grüße
        Andreas

        1. Das heißt es ist also auf keine Fall ratsam die Passwörter unverschlüsselt einzutragen?

          1. Das heißt es ist also auf keine Fall ratsam die Passwörter unverschlüsselt einzutragen?

            es ist immer ein Sicherheitsrisiko. Hab übrigens nachgeschaut, password() in mysql ist eine nicht umkehrbare Verschlüsselung per unix crypt() Funktion. Aber md5 soll meines Wissens "sicherer" sein, vom Algorythmus her und da der String länger ist... aber da bin ich kein Experte, such mal im Archiv, da gibts ein paar wirklich gute Threads zu!

            Grüße
            Andreas

        2. Hi Andreas,

          Das Hauptproblem dabei ist nämlich, dass ich dann niemandem sein
          Passwort schicken kann, wenn er es vergessen hat.
          Ich mache das so, das ich den Leuten dann halt ein neues Passwort
          schicke!

          Yep.

          Das ist dumm, aber anders wäre es wohl eine große Sicherheitslücke,
          wenn man Passwörter einfach aus der DB zurück generieren könnte,
          oder?

          Wenn jemand direkten Zugriff auf die Datenbank hat, könnte er dort die
          Kennworte lesen und anschließend über den normalen Zugang Dinge tun,
          die über eine direkte Datenbankmanipulation auffallen könnten.

          PS: ergibt die Verschlüsselung von immer der gleichen Zeichenfolge
          auch verschlüsselt sicher wieder die gleiche Zeichenfolge?

          Ja - wie sonst soll man ein Passwort überprüfen können?

          Bei md5() schon, bei crypt() nicht, aber das funktioniert soweit ich
          weiß trotzdem.

          Bei crypt() besteht die Eingabe aus dem Paar (salt, password) - wenn
          beide sich nicht ändern, dann ändert sich auch das Ergebnis der
          Verschlüsselung nicht.

          Das verwendete salt steht auch am Anfang des verschlüsselten Passworts

          • _das_ ist also erkennbar. Und damit kann man das gesendete Passwort
            mit demselben salt verschlüsseln und prüfen, ob dasselbe heraus kommt.

          Viele Grüße
                Michael

  2. hi,

    was genau bewirkt "PASSWORD()" in mySQL? Ich hab echt in der Doku nachgesehen und habs nicht ganz kapiert.
    Mit PASSWORD('passwort') verschlüssle ich doch ein Passwort, oder? Wie aber bekomme ich es jetzt wieder unverschlüsselt raus, bzw. wie kann ich dann schauen, ob Benutzername und Passwort richtig sind, wenn sich jemand einloggen will?
    Ich hoffe ihr könnt mir das erklären.

    bin mir nicht ganz sicher aber ich behaupte einfach mal das
    password einen one-way-key erstellt den man nicht wieder zurückverwandeln kann. ich verwende eigentlich immer md5 dafür
    gibts in PHP auch eine funktion.

    http://www.php.net/manual/en/function.md5.php

    für password kann ich mir das nur so vorstellen:
    SELECT * FROM user WHERE username=hui AND password=PASSWORD('pass')
    aber nur geraten

    schöne grüße
    FICHTL