25. April 2024

PHP: Passwörter mit MD5 verschlüsseln

Passwörter sind für interaktive Webseiten essentiell. Allerdings darf man Passwörter nie unverschlüsselt speichern, da dies ein großes Sicherheitsrisiko darstellt. Abhilfe kann hier neben anderen Absicherungen die in PHP integrierte Funktion md5() schaffen. Mit dieser kann man ganz einfach den MD5-Hashwert eines Strings ermitteln.

Strings mit md5() hashen

Der Aufruf von md5() ist selbsterklärend: Man übergibt den String dessen MD5-Hashwert man haben möchte und erhält den entsprechenden Rückgabestring.

 <?php
    $passwort="asdf123";
    
    $passwort_md5= md5($passwort);
    
    echo "Der String '".$passwort."' wird mit md5() zu ".$passwort_md5;
?> 

Hinweis: Beachten Sie, dass ‚asdf123‘ KEIN sicheres Passwort ist und hier nur zu Demonstrationszwecken verwendet wird!

Der Code führt zu folgender Ausgabe:

Der String ‚asdf123‘ wird mit md5() zu 6572bdaff799084b973320f43f09b363

Weiteres:

Seit PHP 5 gibt es bei der Funktion md5() einen zusätzlichen, optionalen Parameter, mit dem sich die Ausgabe auch binär darstellen lässt. Dazu muss man einfach als zweiten Parameter True übergeben. Der Standardwert des Parameters ist False, was zu einer hexadezimalen Ausgabe führt.

<?php
    $passwort="asdf123";
    
    $passwort_md5hex= md5($passwort);
    $passwort_md5bin= md5($passwort, true);
    
    echo "Der String '".$passwort."' wird mit md5() zu ".$passwort_md5hex." (hex) oder ".$passwort_md5bin." (bin)";
?>

Die Ausgabe dieses Codebeispiels ist entsprechend:

Der String ‚asdf123‘ wird mit md5() zu 6572bdaff799084b973320f43f09b363 (hex) oder er����K�3 �? �c (bin)

Verschlüsselte Passwörter abprüfen

Mit MD5 lassen sich Passwörter wunderbar verschlüsseln. So weit so gut. Doch wie kann man nun prüfen ob ein Nutzer das richtige Passwort eingegeben hat? Schließlich lässt sich der MD5-Hash ja nicht einfach so wieder entschlüsseln.

Hier behilft man sich folgendermaßen: Man verschlüsselt das eingegebene Passwort ebenfalls mit MD5 und überprüft, ob die Hashwerte vom abgespeicherten Passwort und vom eingegebenem gleich sind. Falls ja, wurde das richtige Passwort eingegeben.

Hier als Codebeispiel:

<?php
    $passwort="asdf123";
    
    $passworthash= "6572bdaff799084b973320f43f09b363"; ##Aus Datenbank, Datei ...
    
    $passwort_md5= md5($passwort);
    
    echo "<b>Eingegebenes Passwort:</b> ".$passwort."<br>";
    
    if(md5($passwort) == $passworthash)
    {
        echo "Die MD5-Haswerte entsprechen sich. Das Passwort stimmt.";
    }
    else
    {
        echo "Falsches Passwort!";
    }
?>

Der Code führt zu folgender Ausgabe:

Eingegebenes Passwort: asdf123
Die MD5-Haswerte entsprechen sich. Das Passwort stimmt.

Hinweis: Der Hashwert von ‚asdf123‘ wurde hier hartcodiert. Im Regelfall stammt er allerdings aus der Datenbank oder einer Datei und muss natürlich dynamisch angefordert werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert