PHP MD5 entschlüsseln

  • Hallo,


    undzwar lasse ich das Passwort in der MySQL DB mit MD5 verschlüsseln. Und nun mache ich ein UCP und da habe ich eine frage wie entschlüssel ich es wenn er abfragt ob das Passwort richtig ist code:
    if($submit)
    {
    if($username && $password)
    {
    $query = mysql_query("SELECT Name, Passwort FROM accounts WHERE Name = '$username'");
    if(mysql_num_rows($query) == 1)
    {
    while($row = mysql_fetch_assoc($query))
    {
    $dbusername = $row['Name'];
    $dbpassword = $row['Passwort'];
    }
    if($username == $dbusername && $password == $dbpassword)
    {
    $_SESSION['username'] = $dbusername;
    echo header('location: profile.php');
    }
    else echo "Bitte überprüfe deine Angaben.!";
    }
    else echo "Bitte überprüfe deine Angaben.!";
    }
    else echo "Bitte gebe einen Username und ein Passwort ein!";
    }

  • Also wie muss ich es den nun machen ?
    $submit = $_POST['submit'];

    $username = sanitize($_POST['Name']);
    $password = sanitize($_POST['Passwort']);


    if($submit)
    {
    if($username && $password)
    {
    $query = mysql_query("SELECT Name, Passwort FROM accounts WHERE Name = '$username'");
    if(mysql_num_rows($query) == 1)
    {
    while($row = mysql_fetch_assoc($query))
    {
    $dbusername = $row['Name'];
    $dbpassword = $row['Passwort'];
    }
    if($username == $dbusername && $password == $dbpassword)
    {
    $_SESSION['username'] = $dbusername;
    echo header('location: profile.php');
    }
    else echo "Falsches Passwort!";
    }
    else echo "Der Username existiert nicht.!";
    }
    else echo "Tippe ein UserName und ein Passwort ein!";
    }

  • MD5 ist keine Verschlüsselungsmethode, sondern ein Hash. Das hat jetzt natürlich wenig mit Drogen zu tun, sondern ist eher ein Algorhytmus, der eine Zeichenkette umwandelt. Das kann man nicht mehr entschlüsseln, sondern Bruteforcen. Da das allerdings viel zu umständlich ist und auch eine Vergleichsdatenbank an Zeichenketten fordert, ist das nicht möglich.


    Du musst vielmehr den mit MD5 gehashten String (das Passwort in der Datenbank) mit dem MD5 Hash der Eingabe vergleichen, da die Hashs immer die Selben sind.
    Wenn beide identisch sind, ist das Passwort korrekt.
    Du solltest allerdings beachten, dass mit dem MD5 Include erstellte MD5 Hashs in Großbuchstaben umgewandelt wird, die MD5 Funktion von PHP allerdings dies bei kleinen Buchstaben belässt.
    Bei einem UCP wären dann die Hashs nicht mehr identisch, obwohl das Passwort korrekt ist, da der eine Hash Kleinbuchstaben und der andere Großbuchstaben enthält.
    Dazu solltest du die Funktion http://php.net/manual/de/function.strtolower.php verwenden.

  • Ein Hash ist nur eine Prüfmethode, so kann man große Daten z.b. auch in einen "Hash" verwandeln um einen Abgleich zu starten und nicht Byte für Byte miteinander zu vergleichen.


    Nimm einfach die Benutzereingabe lass sie als Hash ausgeben und vergleiche sie mit dem Hash in deiner Datenbank. Wenn der Benutzer sich registriert muss die Eingabe natürlich auch vorher in einen Hash verwandelt und in die Datenbank übertragen werden.

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • if(strcasecmp(md5($password),$dbpassword))


    wie soll ich das hier rein machen ?
    if($submit)
    {
    if($username && $password)
    {
    $query = mysql_query("SELECT Name, Passwort FROM accounts WHERE Name = '$username'");
    if(mysql_num_rows($query) == 1)
    {
    while($row = mysql_fetch_assoc($query))
    {
    $dbusername = $row['Name'];
    $dbpassword = $row['Passwort'];
    }
    if($username == $dbusername && $password == $dbpassword)
    {
    $_SESSION['username'] = $dbusername;
    echo header('location: profile.php');
    }
    else echo "Falsches Passwort!";
    }
    else echo "Der Username existiert nicht.!";
    }
    else echo "Tippe ein UserName und ein Passwort ein!";
    }


  • Viel Spaß...
    (Zeile 13 ca.)

  • Einfach als Query

    Code
    $query = mysql_query("SELECT Name, Passwort FROM accounts WHERE Name = '$username'" AND passwort = '$passwort');


    Dann fällt die If Abfrage meines Vorposters weg.


    Damit meine ich diese:

    PHP
    if($username == $dbusername && md5($password) == $dbpassword)           
                { 
                    $_SESSION['username'] = $dbusername; 
                   echo header('location: profile.php'); 
                }


    Am Ende sieht das dann so aus:


  • Das geht auch noch besser:


    Hier übernimmt MySQL die komplette Arbeit. MySQL Hasht das Passwort selber, guckt ob es einen Benutzer mit dem dazugehörigen gehashten Passwort gibt und zählt auch noch selber. In PHP überprüfen wir dann nur noch ob es jemanden mit genau dieser kombination gibt.

  • Es kommt nurnoch eine weiße seite 8| hier mal die gante index.php: <?php


    include("mysql_connect.php");
    session_start();
    error_reporting(0);


    $submit = $_POST['submit'];

    $username = sanitize($_POST['Name']);
    $password = sanitize($_POST['Passwort']);


    if($submit) {
    if($username && $password){
    $query = mysql_query("SELECT count(*) AS Ergebnis FROM accounts WHERE Name = '$username' AND Passwort = MD5('$password')");
    $row = mysql_fetch_array($query);
    if($row['Ergebnis'] == 1){
    $_SESSION['username'] = $username;
    header('location: profile.php');
    }else{
    echo 'Falsches Passwort und/oder falscher Benutzername!';
    }
    }else{
    echo "Tippe einen Usernamen und ein Passwort ein!";
    }
    ?>


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Evolution Gaming | UCP</title>
    <link rel="shortcut icon" type="image/x-icon" href="/test.ico">
    <form action='index.php' method='POST'>
    <table>
    <tr>
    <td align="right"><font color="#00FF00">Name: <input type="text" name="Name" value='<?php echo $username?>'/> </td>
    </tr>
    <tr>
    <td><font color="#00FF00">Passwort: <input type="password" name="Passwort"/> </td>
    </tr>
    <tr>
    <td><p align="center"><input type='submit' name="submit" value='Einloggen' /> </p></td>
    </tr>
    </table>
    </form>
    </head>
    </html>

  • Um Gottes willen, du bekommst hier wirklich sehr einfache Erklärungen zum Thema MD5 und ignorierst alles gekonnt.
    Wir sind hier kein Sourcecode-Spendeverein.


    Befass dich mit MD5, lerne was ein Hash ist, wie dieser ensteht, und dann weißt du auch, wie du das eingegebene Passwort mit dem Datenbankeintrag vergleichst.


    #Brotfischbaron


    In schā'a llāh

  • Tipps bezüglich Hilfestellung bei Codingfragen


    B2T: Stell erstmal mal error_reporting auf -1 und display_errors auf true, falls nicht sowieso so eingestellt, ich tippe darauf, dass da irgendwo ein Fehler im Code ist.


    PHP
    // Zeile 14
    $query = mysql_query("SELECT count(*) AS Ergebnis FROM accounts WHERE Name = '$username' AND Passwort = MD5('$password') LIMIT 1");
    $row = mysql_fetch_array($query);


    Kleine Anmerkung am Rande: Ein kleiner Blick in den Changelog von PHP 5.5 und siehe da, unter veralteten Features: die alte MySQL-Extension, die du verwendest.

    Moderator der Bereiche: Coding, Vorstellungsrunde und Handelsecke. Über Verwarnungen, falls du zu den Wenigen gehörst, die eine Verwarnung von mir erhalten haben, kannst du jederzeit mit mir reden, sofern der Umgangston stimmt.


    expect us. / unkompetent. Das neue dynamisch. / easy-stripping.net - coming soon! / "9§. the entire website bestands out of english." / Vollprofi in allem, wo gibt und noch mehr; kann auch OOP.
    Kleine Coding-Frage? Schau doch in #dev im IRC vorbei, wir können dir sicher helfen.


    Ich bin für Aufträge im Bereich der Webentwicklung (z.B. User Control Panel) zu haben. Kontaktiere mich diesbezüglich einfach in einer privaten Nachricht mit deinen, möglichst konkreten, Vorstellungen.


    lesen.denken.posten. - [22:54:14] <Goldkiller2> früher gabs immer so coole user da stand in der signatur "lesen.denken.posten."


    Mafia 2 Multiplayer (m2mp.de) - Eine kostenlose Modifikation für Mafia 2, die es, ähnlich wie SAMP, erlaubt über das Internet oder LAN mit bis zu 1000 anderen Spielern zu spielen.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen