Anzeige
Tutorialbeschreibung

md5 > was ist das, wozu dient es, wie geht es?

md5 > was ist das, wozu dient es, wie geht es?

Man hört überall ‚md5-Verschlüsselung’, aber was das genau ist und wie man es verwendet, ist nicht allgemein bekannt.


Wenden wir uns einmal der allgemeinen Definition zu:
Dazu das PHP-Handbuch: http://at.php.net/manual/de/function.md5.php

md5 -- Errechnet den MD5-Code eines Strings

Berechnet den MD5-Hash von str unter Verwendung des RSA Data Security, Inc. MD5 Message-Digest Algorithm und gibt das Ergebnis zurück. Dieser Code ist eine hexadezimale Zahl mit 32 Zeichen Länge. Wurde der optionale Parameter raw_output mit TRUE angegeben, wird der MD5-Wert im Raw Binary Format mit einer Länge von 16 Zeichen zurückgegeben.

Anmerkung: Der optionale Parameter raw_output wurde in mit PHP 5.0.0 eingeführt und ist standardmäßig auf FALSE gesetzt.

Zuerst habe ich beim Lesen geschluckt und gedacht: ‚… stimmen wird es, aber verstehen tu ich’s nicht … ’. Da es aber nicht zu meinen Stärken gehört, aufzugeben, näherte ich mich dem Problem praktisch:

Als erstes sollte man wissen: md5-Verschlüsselung = eine Funktion, die der PHP-Interpreter versteht und ausführt, wenn man die Anweisung gibt. Der Code dazu:

/*<?
$passwort=’psd’; //aber wie ’psd’ verschlüsseln?
$encrypt=md5($passwort); /*so weit so klar, weil md5 eine bekannte Funktion () ist, geht's so*/
echo $encrypt;
?>*/


Versuchen Sie einfach diesen Code und er zeigt:

f6d7022d02ebecf3d3b12aacad4ef7a3

Bei Ihnen auch, aber da werden wir sagen, welch wertlose Verschlüsselung, die ist überall gleich, aber versuchen wir es umgekehrt, also einen code schreiben, der aus f6d7022d02ebecf3d3b12aacad4ef7a3 > psd quasi rückcodet. DIESE Möglichkeit gibt es NICHT!

Das ist die zweite Stärke von md5, neben der ersten, dass eine kurze Funktion sofort 32 Zeichen produziert!
Wie wir oben aus dem Handbuch wissen sind es immer 32 Zeichen, egal wie lang das Passwort im Klartext ist!

Jetzt ist folgendes am Ergebnis zu sehen: 32 Zeichen in Zahlen und Buchstaben (Hexadezimalwerte [das kennen wir schon von Farbwerten] sind immer eine solche Mischung!)

So weit so sicher, wird man sagen.

Aber was hilft das alles, wenn man den Klartext (z.B.: in der Passworteingabe) NICHT mit dem Datenbank-Passwort (das ja md5-verschlüsselt gespeichert ist) – mangels Entschlüsselung - nicht verglichen werden kann?

Insoweit wäre das ein guter Kritikansatz und würde stimmen, wäre da nicht das oben Gesagte: Ich sagte md5 ist eine PHP-Funktion, die SOFORT die Verschlüsselung vornimmt (nahezu ohne Performance-Verlust).
Man kann also die aktuelle neue Verschlüsselung (z.B.: bei der Passworteingabe) mit jener in der Datenbank vergleichen und damit verifizieren oder falsifizieren.

Da es immer gut ist, auch Behauptungen zu verifizieren und eine Datenbanklösung den Rahmen dieses Tutorials sprengen würde, machen wir eine (nicht datenbankbezogene) Kontrollstruktur:

/*<?
$passwortindatenbank='f6d7022d02ebecf3d3b12aacad4ef7a3';
$passwort1='psd1';
$encrypt=md5($passwort1);
if ($encrypt==$passwortindatenbank)
{
echo 'Das Passwort ist korrekt eingegeben! > Login ok.';
}
else
{
echo 'Das Passwort ist NICHT korrekt eingegeben! > Login NICHT ok.';
}
?>
*/

Solange wir bei $passwort1 der Wert ’psd’ ist, wird es sofort verschlüsselt und mit dem in der Datenbank gespeicherten (hier unter $passwortindatenbank ausgewiesenen) Wert verglichen.

Wenn wir aber z.B.: ’psd1’ eingeben, wird psd1 anders verschlüsselt als ’psd’ und daher kommt keine Identität zustande.

Jetzt wird auch klar, warum man beim Login, wenn das PW-System md5 verschlüsselt ist, nie das bestehende Passwort per Mail zugesandt bekommt, sondern ein neues Passwort! … das bisherige Passwort kann ja nicht entschlüsselt werden!

Als Zugabe habe ich mir überlegt, noch einen Passwortgenerator hier (ohne weitere Erklärung) zu schreiben, damit Sie mit md5 und der Zusendung von Zufallspassworten experimentieren können.

ACHTUNG! Dieser Passwortgenerator ist optimal für Zufallsworte im Klartext!

So wie er allerdings hier steht, ist er ‚Mailingfeindlich’, weil auch Sonderzeichen im array verwendet werden, die beim Online-Mailing (SMTP-Server) nicht das Sonderzeichen, sondern ein ’?’ weitermailen!
/*<?
echo '<title>Passwortgenerator für md5-Verschlüsselung</title><body style="font-family:verdana; font-size:10pt">';

function generatePW($length=8)
{
$dummy = array_merge(range('0', '9'), range('a', 'z'), range('A', 'Z'), array('@', '€'));
mt_srand((double)microtime()*1000000);
for ($i = 1; $i <= (count($dummy)*2); $i++)
{
$swap = mt_rand(0,count($dummy)-1);
$tmp = $dummy[$swap]; $dummy[$swap] = $dummy[0]; $dummy[0] = $tmp; }
return substr(implode('',$dummy),0,$length); }
$password = generatePW(9);
echo '<br /><br /><br /><b> Generatorpasswort:</b><br />'.$password.'<br /><br />';?>
*/

Dieser Code aber eignet sich auch fürs mailen:
/*<?
echo '<title>Passwortgenerator für md5-Verschlüsselung</title><body style="font-family:verdana; font-size:10pt">';

function generatePW($length=8)
{
$dummy = array_merge(range('0', '9'), range('a', 'z'), range('A', 'Z')); mt_srand((double)microtime()*1000000);
for ($i = 1; $i <= (count($dummy)*2); $i++)
{
$swap = mt_rand(0,count($dummy)-1);
$tmp = $dummy[$swap]; $dummy[$swap] = $dummy[0]; $dummy[0] = $tmp; }
return substr(implode('',$dummy),0,$length); }
$password = generatePW(9);
echo '<br /><br /><br /><b>Generatorpasswort:</b><br />'.$password.'<br /><br />';?> */
 
Weiteres erkläre ich nicht zum Generator, weil es ja primär um md5 ging.
Ich hoffe, diese Zeilen haben Euch geholfen.

P.S.: Die Auskommentierungen /*  */ einfach vor Gebrauch löschen.


Kommentare
Achtung: Du kannst den Inhalt erst nach dem Login kommentieren.
Portrait von Kloppy
  • 24.01.2011 - 10:39

Gut beschrieben, gutes Tutorial

Portrait von Reaver
  • 20.01.2010 - 16:24

Im Grundprinzip richtig, fehlt nur die Tiefe finde ich.

Trotzdem danke!

Portrait von burke
  • 16.07.2009 - 12:49

echt super tut das jeder der es liest auch verstehen kann.

Portrait von icehawk2
  • 28.02.2009 - 16:27

Finde das Tutorial gut

gerade für anfänger ne sehr gut Erklärung... - habe es jetzt soweit auch verstanden wie das funktioniert ;)

Danke dafür

Portrait von evolotion
  • 07.05.2008 - 14:15

MD5 ist aber auch nichtmehr das sicherste...
siehe hier: http://md5.thekaine.de/
oder auch andere RainboxTables
aber sonst super tutorial

Portrait von breakdown
  • 15.12.2007 - 18:19

sehr gut erklaert. dankdankdank

Alternative Portrait
-versteckt-(Autor hat Seite verlassen)
  • 03.04.2007 - 16:45

Ich habs gerafft...super

Alternative Portrait
-versteckt-(Autor hat Seite verlassen)
  • 27.02.2007 - 16:29

Gut beschrieben 5Punkte!

Portrait von borstenstyle
  • 29.01.2007 - 14:24

Endlich mal ne vernünftige Erläuterung!

Portrait von zimmermann
  • 12.01.2007 - 20:59

Klasse TUTORIAL!!! Gut einfach und einfach gelungen!

Alternative Portrait
-versteckt-(Autor hat Seite verlassen)
  • 05.12.2006 - 12:20

md5 halt im Grundprinzip erklärt - nix neues ;-)
Danke für die Mühe.

Portrait von pcgamer2005
  • 30.11.2006 - 23:24

sehr ausfürlich und gut beschrieben

5 Punkte

x
×
×