# MD5 zurückumwandeln...GEHT DAS?



## chelzyfire (22. Februar 2005)

Hi Leuz!
 Besteht irgendwie die möglichkeit einen md5 code wieder in eine normale zeichenfolge umzuwandeln?

 Zum Beispiel:


```
098f6bcd4621d373cade4e832627b4f6
```
 
 wieder in


```
test
```
 
 per php-code zu machen.


----------



## _voodoo (22. Februar 2005)

Nein.


----------



## Neurodeamon (22. Februar 2005)

MD5 generiert einen HASH, das - einfach ausgedrückt - so etwas wie eine mathematische »Quersumme« aus bestimmten Algorithmen. Darin befindet sich NICHT das Verschlüsselte.


----------



## Sicaine (22. Februar 2005)

Klar geht das mit Bruteforce und ner Rainbowtable. Nur brauchste zirka 1,2 gig um ne tabelle anzulegen, die max 7 lange "wörter" knacken kann mit nem zeichensatz von 68 zeichen. 68 zeichen = a-zA-Z0-9öäüÖÄÜ


----------



## chelzyfire (22. Februar 2005)

Hmm  ok dann lass ich das lieber ^^

 Danke für eure Antworten 

 MfG
 chelzyfire


----------



## BSA (22. Februar 2005)

Es geht auf jedenfall, die Frage ist was du wieder zurück verwandeln willst.

1. Groß- und Kleinschreibung
2. Sonderzeichen
3. Wieviele Zeichen

etc.

Ab 5 Zeichen wird es langsam schwierig, wenn du dann noch Sonderzeichen drin hast, dann kann das dauern.


----------



## Timbonet (22. Februar 2005)

Aber selbst dann ist die Rückverwandlung nicht eindeutig, sondern nur eine von mehreren Möglichkeiten. Du kannst z.B. die Bibel md5-verschlüsseln und das könnte den gleichen Hashwert wie "hallo" haben, mit Brute-Force bekommst du vielleicht "hallo" raus, aber nicht den Text der Bibel - du könntest also nur einen String finden, der den gleichen Hashwert hat, wie der Hashwert, den du hast. Ob die Strings gleich sind, kannst du nicht feststellen.


----------



## Sicaine (22. Februar 2005)

@Timbonet ;-) wenn interresiert den ob der Hash für das gleiche Wort steht? 
nebenbei ist die Kollisionsgröße sehr gering(Also die Chance, dass Hallo ein Wort hat was den gleichen Hash hat aber auch so kurz is.


----------



## Matthias Reitinger (22. Februar 2005)

Sicaine hat gesagt.:
			
		

> @Timbonet ;-) wenn interresiert den ob der Hash für das gleiche Wort steht?


Den Threadstarter vielleicht? I.d.R. will man ja wissen, was man "verschlüsselt" hat...


----------



## Timbonet (22. Februar 2005)

Und sooo viele Möglichkeiten gibt es da auch nicht. Da der Hashwert ein String aus 16 Zeichen mit 32 Zeichen Länge ist, ist die Anzahl der Möglichkeiten 16^32. Wenn du jetzt [0-9a-zA-Z] als mögliche Zielzeichen nimmst, bekommst du:
32^16 = 52^x mit x als Länge des Strings der Kombinationen, die die gleiche Anzahl der möglichen Kombinationen wie der Hashwert hat. Mit etwas Schulmathematik kommt man dann darauf, daß x ungefähr 22,5 ist, du kannst also mit einem 23 Zeichen langen String aus Zahlen, Klein- und Großbuchstaben alle Hashwerte erzeugen unter der Prämisse, daß jeder String einen anderen Hashwert ergibt..


----------



## Sicaine (22. Februar 2005)

Matthias Reitinger hat gesagt.:
			
		

> Den Threadstarter vielleicht? I.d.R. will man ja wissen, was man "verschlüsselt" hat...



oO in der Regel will man das Passwort knacken aber eher darum um sich dann selbst einzuloggen? Ob er es dann mit x oder mit y versucht die beide den gleichen md5 hash ahben probiert, is ja dann egal. So seh ich das zumindest 

@Timbonet hm na jut aber 23 das is ne doch extreme menge finde ich


----------



## Timbonet (22. Februar 2005)

Stimmt, sind schon ein Paar.. Mal überschlagen.. 32^16=2^80, da 2^10 ungefähr 1000, sind das ca 10^24 Möglichkeiten mit je 16 Byte Länge.


----------



## Neurodeamon (22. Februar 2005)

Bruteforce =/= zurückumwandeln
nur nebenbei bemerkt


----------



## qsrs (23. Februar 2005)

Wie realisiert man so etwas, wenn ein User sein Passwort vergessen hat und man ihm dieses zukommen lassen will, dieses jedoch MD5 verschlüsselt wurde?


----------



## time-master (23. Februar 2005)

Es muss ein neues Passwort erstellt werden!
  Dieses kann dann dem User zugeschickt werden!


----------



## Gumbo (23. Februar 2005)

Weise ihm einfach ein neues zu, das er dann ändern kann.


----------



## qsrs (23. Februar 2005)

Ich bin gerade am überlegen, wie man das technisch umsetzt. Ich denke daran, dass der User das selber machen kann. Dann kann aber jeder veranlassen ein Passwort zu ändern, der den Usernamen eingibt. Auch wenn es nicht sein eigener ist. Könnt ihr ein paar Tipps geben? Und vielleicht noch Hinweise zur Umsetzung?


----------



## Dennis Wronka (23. Februar 2005)

Wie waer's mit zusaetzlicher Sicherheit inden Du nicht nur nach dem Usernamen, sondern auch nach der eMail-Adresse fragst? Die steht doch sicher mit in der Datenbank, oder?


----------



## qsrs (23. Februar 2005)

Klar, stimmt eigentlich. Wobei in Foren etc. diese manchmal auch öffentlich ist, also diese Variante auch nicht 100% sicher ist. Kennt einer Benutzername und E-Mail-Adresse, kann er es veranlassen das Passwort eines anderen Users zu ändern.

Man könnte aber evtl. einen Aktivierungs-Link für die Änderung in der E-Mail mitschicken, so dass das Passwort erst nach der Aktivierung geändert wird. Wie macht ihr so etwas?


----------



## Dennis Wronka (23. Februar 2005)

Ich hab mir darueber ehrlich gesagt noch keine Gedanken gemacht, obwohl ich im Moment auch md5-Passwoerter nutze.
Aber da meine HP noch im Aufbau ist kann sich das noch gut aendern.

Aber vielleicht weiss ja jemand anders 'ne fetzige Loesung.


----------



## JohannesR (23. Februar 2005)

Ach komm, das ist nicht so schwer. Das neue Passwort wird in eine Tabelle mit den temporaeren Passwoertern geschrieben. Wenn der Nutzer auf den Aktivierungslink klickt, der den Hash einer Zufallszahl enthaelt, wird das temporaere Passwort in die User-Table geschrieben.


----------



## Dennis Wronka (23. Februar 2005)

Sicherheitstechnisch ist es dann aber sinnvoll wiederum auf die Abfrage der eMail-Adresse zu verzichten und den Link an die Adresse aus der Datenbank zu mailen, sodass auch nur der User der sich registriert hat die Mail bekommt, und nicht irgendjemand irgendeine Mail-Adresse angibt.
Das sollte dann schon recht sicher sein. Ob jetzt jemand das Passwort von dem eMail-Konto des Users hat, das ist dann nicht mehr unser Problem. Man kann ja auf seiner Homepage die Leute nicht vor allen Gefahren des Internet schuetzen.


----------



## Neurodeamon (23. Februar 2005)

qsrs hat gesagt.:
			
		

> Man könnte aber evtl. einen Aktivierungs-Link für die Änderung in der E-Mail mitschicken, so dass das Passwort erst nach der Aktivierung geändert wird. Wie macht ihr so etwas?


Ich habe mal ein Newsletterscript geschrieben, das das genau so - mit Aktivierungs-Link in einer E-Mail an den betreffenden User - funktionierte. So kann auch nur derjenige das Passwort ändern, dem die Adresse gehört (bzw. zugriff darauf hat). Das ist sehr sicher, vor allem wenn man z. B. mit einem 32-stelligen Hash o. ä. arbeitet. Wenn Du interesse hast das selbst umzusetzen, kann ich Dir einen Teil meines Quellcodes als Beispiel schicken.


----------



## BigDundee (23. Februar 2005)

***gelöscht, weil das gleiche drin stand wie in den Posts dadrüber***

Hatte wohl den Threadd zulange offen, sorry


----------



## qsrs (23. Februar 2005)

@Johannes Röttger
Müsste doch reichen, wenn man in der Tabelle der User zwei Spalten definiert. Eine mit dem geänderten Passwort, die andere mit einem Wert der angibt ob dieses aktiviert wurde oder nicht.

@Neurodeamon
Ja, ich habe vor das umzusetzen. Das wäre sehr nett zu sehen, wie Du das gelöst hast. Jeder setzt seine Ideen anders um und mich interessiert dabei immer wie man es am Effektivsten, Einfachsten und Schnellsten, sprich am Besten machen kann.


----------



## Oliver Gringel (23. Februar 2005)

Ein Aktivierungslink ist nicht unbedingt nötig. Du speicherst das neu generierte Passwort in einer zweiten Spalte. Wenn der User sich mit dem neu generierten Passwort einloggt, dann überträgst du es in die eigentliche Passwort-Spalte und löscht das temporäre Passwort. Wenn er sich mit dem alten Passwort einloggt, dann löscht du einfach das temporäre Passwort, und lässt das alte Passwort stehen.
Es wäre noch sinnvoll, beim generieren eines neuen Passworts die aktuelle Zeit mit in Datenbank zu schreiben, so dass neu generierte Passwörter z.B. nur 1 Tag gültig sind. Wenn er sich bis dahin nicht mit dem neuen Passwort einloggt, dann wird das temporäre Passwort wieder gelöscht.


----------



## JohannesR (23. Februar 2005)

qsrs hat gesagt.:
			
		

> @Johannes Röttger
> Müsste doch reichen, wenn man in der Tabelle der User zwei Spalten definiert. Eine mit dem geänderten Passwort, die andere mit einem Wert der angibt ob dieses aktiviert wurde oder nicht.


Nunja, dann schleppst du diese Last aber immer mit, ausserdem brauchst du mindestens drei Spalten, eine weiter fuer den Hash an sich, denn der muss ja stimmen.


----------



## Neurodeamon (23. Februar 2005)

qsrs hat gesagt.:
			
		

> @Johannes Röttger
> @Neurodeamon
> Ja, ich habe vor das umzusetzen. Das wäre sehr nett zu sehen, wie Du das gelöst hast. Jeder setzt seine Ideen anders um und mich interessiert dabei immer wie man es am Effektivsten, Einfachsten und Schnellsten, sprich am Besten machen kann.


Schick mir eine E-Mail mit aussagekräftigem Betreff an:
neurodeamon[(AT)]gmail[(DOT)]com
Ich sende Dir dann meine Codeschnipsel mit Kommentaren zu


----------



## preko (24. Februar 2005)

@ chelzyfire:

Hi,

ich würde Dir allerdings SHA1 Verschlüsselung empfehlen, da MD mitterweile nicht mehr (so) sicher ist.

Ein bereits behandelter Thread erörtert dies sehr gut.

Beste Grüße,
preko


----------



## shutdown (24. Februar 2005)

Hi!

Probiers halt mal so:

Jeder User gibt bei der Anmeldung eine geheime Frage und eine geheime Antwort mit an.

Will jetzt jemand sein Passwort ändern, so muss er seinen Usernamen angeben.

Danach wird die geheime Frage an die E-Mail-Adresse aus der Datenbank gesendet, die zum Usernamen gehört.

Danach muss er dann den Usernamen und die geheime Antwort angeben (die ja nur er wissen kann, denn nur an ihn wurde überhaupt die Frage gesendet).

Und wenn dann alles passt, dann änderst du auf ein Random-Passwort.

cu shutdown


----------



## Matthias Reitinger (24. Februar 2005)

preko hat gesagt.:
			
		

> ich würde Dir allerdings SHA1 Verschlüsselung empfehlen, da MD mitterweile nicht mehr (so) sicher ist.


Auch hier nochmal: SHA1 ist keine Verschlüsselung! Es ist ein Algorithmus zur Bildung einer Prüfsumme.

Außerdem: Ob MD5 oder SHA1... das ist bei 0815 Webanwendungen ziemlich egal. Die Hashes werden meist in einer Datenbank zusammen mit allen anderen Benutzerdaten abgelegt. Das heißt, wenn ein Cracker an die Hashes kommt, dann kommt er i.d.R. auch an die anderen Sachen, die er wissen will. Und zwar ohne lang mit der Brechstange nach dem Passwort zu suchen.


----------



## Sicaine (24. Februar 2005)

Matthias Reitinger hat gesagt.:
			
		

> Auch hier nochmal: SHA1 ist keine Verschlüsselung! Es ist ein Algorithmus zur Bildung einer Prüfsumme.
> 
> Außerdem: Ob MD5 oder SHA1... das ist bei 0815 Webanwendungen ziemlich egal. Die Hashes werden meist in einer Datenbank zusammen mit allen anderen Benutzerdaten abgelegt. Das heißt, wenn ein Cracker an die Hashes kommt, dann kommt er i.d.R. auch an die anderen Sachen, die er wissen will. Und zwar ohne lang mit der Brechstange nach dem Passwort zu suchen.



Vielleicht will ja jemand die Passworter und die Emailadressen? Nicht jeder verwendet für jeden acc ein anderes PW.


----------



## JohannesR (24. Februar 2005)

SHA1 wurde geknackt.


----------



## preko (24. Februar 2005)

Matthias Reitinger hat gesagt.:
			
		

> ...Auch hier nochmal: SHA1 ist keine Verschlüsselung! Es ist ein Algorithmus zur Bildung einer Prüfsumme....



Sorry Matthias,

im Eifer des Gefechts übernahm ich die Fehlerhafte Bezeichnung. Selbstverständlich hast Du recht.

Eine kleine Freud´sche Fehlleistung! 

Beste Grüße,
preko


----------



## mgd-one (25. Februar 2005)

Warum macht ihr es euch so komplieziert? Es ist doch viel einfacher als ihr es euch da überlegt. Das ist doch nur unnötige Arbeit!

Nach eurem Prinzip braucht ihr ein extra Script.

Aber wenn ihr eh schon ein Script habt wo sich der angemeldete User sein Passwort ändern kann. Und ihr ein Script geschrieben habt womit ihr die E-Mail an die E-Mail des Users aus der Datenbank schickt dann braucht ihr doch keinen aktivierungs Link oder geheimfrage. Ihr schickt einfach anstatt des Aktivierungslinkes eine E-Mail in der steht: "Ihr neues Passwort lautet: blabla" und das Passwort ist eine belibiglange zahlenkombination die mit einem Zufallsgenerator gemacht wird. Und beim nächsten Login kann wenn der User es möchte sein Passwort ändern. Da braucht ihr dann keine neuen Splaten oder ähnliches in eurer DB.

Gruß mgd-one


----------



## qsrs (25. Februar 2005)

Es geht nicht um den angemeldeten User.





			
				qsrs hat gesagt.:
			
		

> Wie realisiert man so etwas, wenn ein User sein Passwort vergessen hat und man ihm dieses zukommen lassen will, dieses jedoch MD5 verschlüsselt wurde?


----------



## mgd-one (25. Februar 2005)

Das ist mir schon klar. Was ich mit dem Angemeldeten User meinte war, dass man nur sein passwort ändern kann wenn man angemeldet ist. Und wenn man sein passwort vergessen hat dann kann man durch die eingabe des user namens und dem drücken eines buttens namens "passwort vergessen?" sich an die in der datenbank abgespeicherten E-Mail adresse eine E-Mail mit einem generierten neuen passwort zukommen lassen das man dann wen man sich mit dem neuen passwort angemeldet hat ändert. zusätzlich absichern könnte man das dann noch das man sagt wenn man das passwort vergessen hat muss man benutzernamen und e-mail angeben und beide daten mit der datenbank vergleichen. dadurch das das neue passwort in der e-mail an die adresse aus der datenbank verschickt wird kann kein dritter irgendwas damit machen.

gruß mgd-one


----------



## qsrs (25. Februar 2005)

Nunja, das war ja unsere Überlegung.





> zusätzlich absichern könnte man das dann noch das man sagt wenn man das passwort vergessen hat muss man benutzernamen und e-mail angeben und beide daten mit der datenbank vergleichen.


 Nur gibt es Foren etc., bei welchen genau diese Daten öffentlich sind.





> Kennt einer Benutzername und E-Mail-Adresse, kann er es veranlassen das Passwort eines anderen Users zu ändern.


 Da finde ich ein temporäres Passwort, welches nach der ersten Anmeldung fest übernommen wird, bzw. die Variante mit dem Aktivierungslink noch am Besten.


----------



## Neurodeamon (25. Februar 2005)

Letztenendes ufert die Diskussion doch wieder in eine Glaubensfrage aus ...
;-]

Jede Methode hat ihre Vor- und Nachteile. Jeder Benutzer tendiert zu einer anderen Lösung. Und wenn wir so weitermachen haben wir hier bald eine Thread, der jede erdenkliche Möglichkeit beschreibt  ;-)


----------



## mgd-one (25. Februar 2005)

@qsrs

das ist doch  egal (sorry für den ausdruck)!

die absicherung ist ja nur ne halbe, damit nicht jeder x belibige einfach aus scheis benutzernamen eingibt und auf "passwort vergessen?" drückt. die eigentliche absicherung ist die e-mail wenn du einfach ne e-mail mit dem neuen passwort verschickst und in der datenbank das neue passwort über dem alten passwoirt schreibst kann keiner außer der entsprechende benutzer die e-mail abrufen und somit hat das neue passwort auch nur der EINE user dem der account auch gehört.

ist doch einfach und logisch, oder? versteht mich irgendjemand nicht?

ich habe es auf jeden fall so auf meiner hp und keiner kann die accounts der anderen hacken.

also wünsch euch noch viel spass bei der diskusion 

gruß mgd-one


----------



## qsrs (26. Februar 2005)

Doch, doch. Ich habe es schon verstanden. Klar ist auch, dass das neue Passwort nur der kennt, der die E-Mail bekommt. Wenn jedoch E-Mail und Username bekannt sind ist es eben jederzeit möglich das Passwort zu ändern. Ich fände es etwas unschön, wenn jeder der diese Daten kennt, veranlassen könnte das Passwort zu ändern. Auch wenn er es nicht kennt und damit nichts anfangen kann.

Jeder sollte da seine eigene Methode finden. Ist nur eine Meinung.


----------

