Md5-Hash zurückwandeln. Wie?

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    Md5-Hash zurückwandeln. Wie?

    Moin! :)
    Ich habe einen MD5-Hash den ich wieder in Klartext umwandeln möchte.
    „E10ADC3949BA59ABBE56E057F20F883E“
    Der ursprungswert ist „123456“.
    Leider finde ich keinen Code, wie man erfolgreich, diesen MD5 umwandeln kann.
    Ich fände Code im Internet, aber er spuckt dann nur Japanische Zeichen oder Sonstigen Blödsinn.
    Unten habe ich den Code, der einen String in einen MD5-Hash ändert.
    Freue mich auf eure Hilfe
    BIG THX

    VB.NET-Quellcode

    1. Public Shared Function getMD5Hash(ByVal strToHash As String) As String
    2. Dim md5Obj As New System.Security.Cryptography.MD5CryptoServiceProvider()
    3. Dim bytesToHash() As Byte = System.Text.Encoding.UTF8.GetBytes(strToHash)
    4. bytesToHash = md5Obj.ComputeHash(bytesToHash)
    5. Dim strResult As String = ""
    6. Dim b As Byte
    7. For Each b In bytesToHash
    8. strResult += b.ToString("x2")
    9. Next
    10. Return strResult
    11. End Function
    Visual Basic.NET 8o
    MS-SQL
    8o
    Beim Hashen (nicht zu verwechseln mit Haschen) geht's darum, dass man genau das nicht kann.
    Beispiel: Mein eMail-Anbieter will bei der Registrierung ein Passwort von mir. Das gebe ich ein. Der Hash-Wert (!) davon wird bei denen gespeichert. Gebe ich ein Passwort ein, wird dieses gehasht und mit dem gespeicherten Hashwert verglichen. Stimmen beide überein, habe ich wohl das richtige Passwort eingegeben. Würden die mein Passwort im Klartext speichern oder zurückrechnen können, hätten die etwas mehr Daten von mir, als mir lieb wäre. Das dürfen die m.E. auch gar nicht. Ein Passwort soll ja nur dem User bekannt sein. Aber solche schwarzen Schafe gibt es immer wieder. Wird dann immer öffentlich bekannt, wenn Datenbanken gehackt werden.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Hallo @Cheffboss

    Ich würde auch generell weg von den alten Sachen. aber was noch viel wichtiger ist:
    Hashen ist nicht gleich Passwort-Hashen. Speziell dem Passwort-Hash sollte viel mehr Aufmerksamkeit gewidmet werden, als einfach nur das Hashen.

    Die neuen HashAlgos bieten hier bessere Möglichkeiten, und sind bestimmt auch sicherer.

    Bessere HashAlgos sind z.B. SCrypt, BCrypt, Argon2. Meiner Meinung nach sollten die Sha_X-Algos (sha3, sha256 etc.) für ein Passworthash nur in Frage kommen, wenn sie auch richtig behandelt werden.
    Ein Passwort einfach nur mit einem Sha256/512 zu hashen und so in die Datenbank zu speichern finde ich fahrlässig, ausser das Passwort ist wirklich sehr lang (>32/64 Byte und viel mehr), dann bietet es eventuell ein bisschen Sicherheit, muss es aber unter umständen nicht unbedingt.

    Vielleicht besser wäre es die Sha_3_X-Algos in Kombination mit einem Salt oder in Kombination mit Salt-Pepper abzuspeichern, wobei der Pepper an einen anderen Ort liegen sollte als in der Datenbank. Aber auch das muss nicht heissen, dass es optimal ist für ein Passwort-Hash das abgespeichert wird, vor allem wenn das Passwort noch kurz ist.

    Es muss also ein Verfahren her, und nur das darf als Passwort-Hashen bezeichnet werden, und nicht einfach das Hashen mit einem HashAlgo wie zum Beispiel sha256.

    BScrypt, Scrypt Argon2 sind solche "Verfahren", und bieten gemäss Praxis und Medien auch guten Schutz dafür.

    EDIT:
    Für das Speichern eines Hashwertes in einer Datenbank. Bei sehr strengen Vorgaben, kann man auch auf eines der hier erwähnten PasswortHashed zurückgreifen.
    Ich habe es noch nicht getestet, aber ab .Net6 gibt es das HKDF, und scheint mir sehr einfach und vielversprechend zu sein. Für die, die noch nicht mit .Net6 arbeiten, hab ich eine Alternative Klasse im Netzt gefunden.
    docs.microsoft.com/en-us/dotne…ography.hkdf?view=net-6.0
    gist.github.com/CodesInChaos/8710228#file-hkdf-cs
    Spoiler anzeigen

    C#-Quellcode

    1. private static void TestHkdf()
    2. {
    3. //https://gist.github.com/CodesInChaos/8710228#file-hkdf-cs
    4. //Der gewünschte HashAlgo. Ist bei dieser Klasse schon auf
    5. //HashAlgorithmName.SHA256 festgelegt.
    6. //var algorithm = HashAlgorithmName.SHA256;
    7. //InputKeyMaterial: Das Schlüsselmaterial (z.B. ein Key, Pw etc.)
    8. var ikm = RngBytes(32); //Passwörter sind meisten ab 10 Byte
    9. //Ein optionaler Salt
    10. var salt = RngBytes(32);
    11. //Optional Additional Data. Die zusätzlichen für diese
    12. //Instanz gewählte Daten. (z.B. Entropie)
    13. var info = RngBytes(4);
    14. var length = 32; // Beliebig, es kann auch 64 genommen werden.
    15. var hkdf = new Hkdf( );
    16. var hash = hkdf.DeriveKey(salt, ikm, info, length);
    17. }



    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „exc-jdbi“ ()

    Daten die in der Datenbank nicht einfach so eingesehen werden dürfen und die nicht irgendwie von den Nutzer der Datenbank abgeschirmt (Benutzerrechte etc.) werden können, müssen wohl Verkryptet abgespeichert werden.

    Ich sehe da keine andere Möglichkeit. Lass mir aber gerne Vorschläge zeigen. Ich bin auf jeden Fall lernwillig. :)

    Freundliche Grüsse

    exc-jdbi

    EDIT:

    @Cheffboss

    Ich glaube nicht das jemand sich wirklich noch die Mühe macht, den Klartext (viele viele Kombinationen wahrscheilich) aus dem MD5-Hash zu rekonstruieren.
    Es ist bekannt das der MD5-Algo älter ist, und das Wissen um diesen Algo mittlerweile so gross ist, dass es nicht mehr als wirklich sicher eingestuft werden darf.

    Interessant wäre es sicher, aber die Motivation wohl nicht.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „exc-jdbi“ ()

    @Cheffboss: Was wolltest Du denn eigentlich damit bezwecken? Wozu generierst Du überhapt nen Hashwert?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed
    Ich habe in meiner Datenbank, Benutzer die sich angemeldet haben mit einem Passwort.
    Dann dachte ich mir, ich könnte diese Passwörter auslesen, da ich diese als MD5-Hash abgespeichert habe.
    Aber egal, ich habe nun den Wert als SELECT ******* AS Passwort eingestellt.
    Visual Basic.NET 8o
    MS-SQL
    8o
    @Cheffboss Ist ja immer eine Sache des Aufwandes. Ich denke jemand der sich etwas in die Materie eingelesen hat kann sehr wohl ein MD5-Passwort knacken. Die Verschlüsselung geht halt nur in eine Richtung vom: Passwort 123456 -> HashFunktion -> „E10ADC3949BA59ABBE56E057F20F883E“'
    Das heißt, um das Passwort zu erlangen muss man es raten (millionen mal) und solange Hash Ergebnisse berechnen bis man den Hash generiert, den man kennt.

    Mit Hilfe des Computers kann man Million Hashes pro Sekunde erzeugen also versucht man automatisch:
    1 != „E10ADC3949BA59ABBE56E057F20F883E“
    2 !=„E10ADC3949BA59ABBE56E057F20F883E“
    ....
    123 != „E10ADC3949BA59ABBE56E057F20F883E“
    ....
    123456 == „E10ADC3949BA59ABBE56E057F20F883E“
    bis man mit dem geratenden Passwort den Hash generiert, denn man kennt. Bingo! Fertig.


    Ein schönes und unterhaltsames Video dazu :) Es gibt da so einige Tricks (Lexikons, Passwortlisten,...).

    Die Software war glaub ich cudahashcat. Ist relativ simple zu bedienen.



    This has one unfortunate ramification for password hashes: very few of them were designed with such massive and commonly available GPU horsepower in mind. Here are my results on my current PC, which has two ATI Radeon 7970 cards generating nearly 16000 M c/s with MD5. I used oclHashcat-lite with the full range of a common US keyboard – that is, including uppercase, lowercase, numbers, and all possible symbols:

    all 6 character password MD5s 47 seconds
    all 7 character password MD5s 1 hour, 14 minutes ...

    Der Eintrag ist von 2012 und heute sind die Cpus/Gpus noch schneller.

    Lg nogood

    codewars.com Rank: 4 kyu
    OMG! Die Passwörter von Usern auslesen wollen?!? black sheep from post#2 is calling …
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed
    Ja, das sind meine Benutzer die in meiner Datenbank drin stehen,
    ich weiß Passwörter sollte man nicht einfach auslesen.
    Aber ich dachte, wenn der User das Passwort vergessen hat, das man als Administrator dann, das Passwort sieht und dem User wieder zu Verfügung stellt.
    So eine Art Passwort vergessen Funktion.
    Ich habe aber nun das Passwort einfach verschleiert…
    Visual Basic.NET 8o
    MS-SQL
    8o
    Md5 Hash e10adc3949ba59abbe56e057f20f883e rückzuführen ging erschreckend schnell. Von ich hab keine Ahnung was ich mache, 5 Min Youtube Video geschaut Software geladen und eine BefehlsZeile eingetippt bummm 9,xx Sekunden später Passwort 123456 in der TextDatei.

    Also MD5 ist auf gar keinen Fall eine sichere Verschlüsselung (Einweg) jedenfalls wenn das Pws so kurz ist wie du es angegeben hast.

    Lg nogood

    -----
    Started: Fri Jun 25 17:28:41 2021
    Stopped: Fri Jun 25 17:28:50 2021
    e10adc3949ba59abbe56e057f20f883e:123456
    codewars.com Rank: 4 kyu

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nogood“ ()

    Cheffboss schrieb:

    So eine Art Passwort vergessen Funktion.
    Macht man, indem man ein neues Passwort setzt, nachdem der User bestätigen konnte, dass er es ist. Ihm sein Passwort mitzuteilen, bedeutet letztenendes, dass man dem Provider nicht trauen darf.

    @mrMo: Ich tendiere dazu, das Thema "wie speichert man Passwörter" in ein eigenes Thema auszulagern. Einmal, weil es eigentlich am Ausgangspost vorbeigeht, aber auch, weil ich selber an dem Thema interessiert bin und es m.E. wichtig wäre, dass das ein für alle Mal (?, haha, in der IT geht das eh nicht) klar auf dem Tisch liegt, wie man das richtig richtig macht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Der Vollständigkeit halber hier noch die Info, wohin einige der Posts gewandert sind: Hashing und Verschlüsseln von DB-Daten: best practice gesucht
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum