PHP Verschlüsselungen in PHP

pp3345

Lieutenant
🎅Rätsel-Elite ’24
Registriert
Feb. 2008
Beiträge
637
Ich verstehe wie man z. B. mit md5 etwas verschlüsselt, aber wie entschlüsselt man es dann wieder? Vielleicht ist das ne dumme Frage, aber ich lerne noch...
 
md5 hasht das was du ihm übergibts.
man kann das nicht wieder entschlüsseln.
hätte ziemlich gravierende auswirkungen wenn md5 knackbar wäre
 
Also wenn du Passwörter verschlüsselt speichern willst, dann musst du sie ja gar nicht entschlüsseln können.

Bei der Prüfung ob ein Passwort korrekt eingegeben wurde, verschlüsselst du einfach das Passwort ebenfalls auf die selbe weise, und vergleichst die verschlüsselten Zeichenfolgen miteinander - gleiches Passwort bedeutet selber Hash, verschiedene Passwörter verschiedene Hashs (theoretisch können auch verschiedene Passwörter zum selben Hash führen, aber die Wahrscheinlichkeit geht gegen 0...)

@Straßdörfler: Ok, dann erklär uns doch mal wie du MD5 knackst. Bin neugierig, man lernt ja nie aus.

MD5 Hashes (Klartext Rettung) (GPU Beschleunigung!)
Interessant dass bei einigen Dingen "guaranteed decryption" steht, bei MD5 allerdings nicht...
Und "e8636ea013e682faf61f56ce1cb1ab5c" wollte das Programm auch nicht entschlüsseln, aber vielleicht bin ich auch nicht fähig genug, es kam zumindest der Hinweis dass weitere Informationen fehlen würden...
 
Zuletzt bearbeitet:
im prinzip kann man alles was verschlüsselt wird auch wieder entschlüsseln, ist halt nur ne frage der zeit

zum verschlüsseln nimmt man in der regel einen schlüssel, mit dem man dann das verschlüsselte wieder entschlüsseln kann...
 
Zuletzt bearbeitet:
Hmm, OK, verstehe, einfach beides verschlüsseln und vergleichen, warum bin ich da net gleich drauf gekommen. Danke.
 
abac6dcc5c015d207a21512a783936ca

dann mach dich mal dran.
unter 'entschlüsseln' versteht man einen algorithmus der aus dem verschlüsseltem wieder klartext macht und nicht einfaches bruteforcen.
mit bruteforce kann man alles knacken.
kommt nur drauf an ob wie lange du warten kannst bzw wann du stirbst.

es gab gerüchte um einen russischen(!?) mathematiker dem es angeblich gelungen sein soll md5 zu knacken.

@pp3345 wie 1668mib schon gesagt hat. wenn du passwörter in deiner datenbank speicherst und dann beim login natürlich überprüfen willst ob das auch das richtige password ist machst du es wie folgt:

beim registrieren gibt der user das password 'XY' ein.
du md5-hashst dann 'XY' und speicherst es in der datenbank.
beim login guckst du dann ob der md5 hash des eingegebenen passwords zu dem md5 hash in der datenbank passt :)
 
md5 verschlüsselt nicht es hasht! aes, des und konsorten gehören zu verschlüsselung, nicht md*, sha*, ripemd-*, whirlpool oder sonstige!

eine verschlüsselung kann man immer entschlüsseln. bei einem hash kann man nur durch versuche den richtigen wert herausbekommen, was überhaupt gar nix mit entschlüsseln, sondern simplen raten zu tun hat.
 
Um mal zurück zum Thema zu kommen. Das MD5 hasht und nicht verschlüsselt, dürfte mittlerweile erörtert sein. Um aber deine Frage zu beantworten, wie man mit PHP verschlüsselt, reicht ein Blick in die deutsche, sehr übersichtliche und jedermann einsehbare Dokumentation.
 
Zum Ver- und Entschlüsseln die mcrypt-Funktionen benutzen.
 
Zuletzt bearbeitet:
Noch ein Mal ein abschließendes Statement zu MD5: "Knackbar" in dem Sinne ist es nicht. Das würde nämlich bedeuten, dass man die Zeichenfolge oder Zahl, die als Ausgangsbasis für den Hash diente, wiedererlangen könnte. Das ist allerdings nicht möglich, weil ein Hash (Prüfsumme) eine feste Länge hat und nicht zur Verschlüsselung dient. Im Falle MD5 ist der Hash immer 128 Bit (korrigiert) lang, egal ob die Eingabe "0" oder ein ganzer Wikipedia-Artikel war.
Die einzig mögliche Schwachstelle bei Hashes ist, eine alternative Ausgangsbasis -- also ein anderes Wort -- zu finden, die/das zum gleichen Hash führt. Da es aber 2^128 (korrigiert) mögliche Hashes (von 00..00 bis ff..ff) gibt, ist das nahezu ausgeschlossen und erfordert sehr viel Rechenpower.
Um zu vermeiden, dass es Crackern möglich ist, eine passende Zeichenkette zu finden, baut man in seine Hashes normalerweise auch noch Token ein, die z.B. den Hash der User-ID enthalten.
Heißt: Man bildet nicht einfach den Hash des Passworts, sondern verknüpft es sowohl bei der Erstellung des Hashes als auch beim Vergleich während des Logins mit einer weiteren Kenngröße, die die User-ID, das Geburtsdatum oder sonstwas sein könnte. Wichtig ist nur, dass man ohne den PHP-Code zu kennen nicht einfach auf die verwendete Methode kommt.

Ich hoffe, dass ich dir mit dem Theorie-Geschwafel ein bisschen Licht ins Dunkel gebracht habe :).

Entschlüsselbare Algorithmen sind AES, DES usw.. Beim Speichern von Passwörtern sollte man u.U. über asymmetrische Verschlüsselungen nachdenken, damit nur der User in der Lage ist, das eigene Passwort auch wieder zu entschlüsseln. Ich empfehle mal Wikipedia als Einstiegslektüre :).
 
Zuletzt bearbeitet:
MD5 besitzt 128 Bit, nicht 256 und damit fällt auch schonmal die Anzahl der möglichen Kombinationen aus: es sind nämlich "nur" 2^128 und das ist 2^128 mal weniger als 2^256 - erstaunlich, was?

Es gibt neuerdings einen CB-Artikel zum Thema wie Grafikkarten zur schnelleren Kollisionsfindung von Hashalgorithmen MD5 beitragen können. Sehr interessant.
 
2^128 ergibt eine Zahl mit 39 Stellen. Wenn man MD5 zum Abgleich von Passwörtern richtig verwendet, ist es sicher genug ... jedenfalls für ihn.
 
1668mib schrieb:
...Und "e8636ea013e682faf61f56ce1cb1ab5c" wollte das Programm auch nicht entschlüsseln...
Passt nicht mehr wirklich zum Thema, aber zu Hashes fallen mir im gleichen Atemzug Rainbow Tables ein. Davon gibt es inzwischen jede Menge im Netz (auch zum Herunterladen). Der von dir angegebene Hash kann z.b. von der Zeichenkette "geheim" gebildet werden. Versuch macht kluch. Wie das ganze funktioniert und wie man dagegen ankämpfen kann, findet man im Netz - z.B. Stichwort Salted Hash.

Es bleibt dennoch dabei: für eine ordentliche Ver- und Entschlüsselung sind Hashes nicht geeignet.
 
Noch eine kleine anmerkung meinerseits:

Verwendet doch die MD5-Funktion doppelt:
PHP:
<?php
$passwort = 'meinpasswort';
$passworthash = md5(md5($passwort));
?>

Damit hat Brutforce keine Chance mehr, da es nun 2^128^128 (richtig? auf jedenfall unglaublich viele) möglichkeiten gibt.
Bis das "geknackt" (oder besser gesagt mit Bruteforce erraten) ist (mit heutigen Rechnern incl. 4 GTX280) haben wir das Jahr 3000 :D
 
claW. schrieb:
doppeltes hashen oder verschlüsseln hat genau 0 wirkung auf die sicherheit.

Und wieso ?
Bruteforce braucht dann doppelt so lange:

1.) Muss es den ersten Hash herausfinden
2.) Muss es das Wort, welches den ersten Hash ergibt, herausfinden.

Das ist der doppelte Zeitaufwand, wie wenn es "nur" den 2.) Schritt machen muss.

Außerdem wird die entschlüsselung über die genannten Rainbow Tables (siehe Gobble-G) unmöglich, da die nur einfach gehashte Standard-Passwörter beinhalten.
 
Zuletzt bearbeitet:
Zurück
Oben