Überprüfen Sie, ob die Zeichenfolge ein MD5-Hash ist

Lesezeit: 3 Minuten

Benutzer-Avatar
kmGeld12

Ich habe versehentlich das Hashing von Passwörtern beendet, bevor sie gespeichert wurden, daher enthält meine Datenbank jetzt eine Mischung aus MD5-Passwörtern und nicht gehashten Passwörtern.

Ich möchte diejenigen durchlaufen und hashen, die nicht MD5 sind. Ist es möglich zu überprüfen, ob ein String ein MD5-Hash ist?

  • Die Antwort von NullPointer ist Ihre beste Chance, aber Sie können sich trotzdem nicht sicher sein, es sei denn, Sie erlauben Benutzern bereits, ein Passwort zu speichern, das 32 Zeichen lang sein kann.

    – Inhan

    13. Januar 2013 um 4:43 Uhr

  • Off Topic, aber MD5 gilt als “kaputt” zum Speichern von Passwörtern, da Sie alle möglichen Schlüssel so einfach berechnen können. Schau mal unter: stackoverflow.com/questions/4795385/… und stackoverflow.com/questions/1581610/… und openwall.com/phpass

    – tsujp

    13. Januar 2013 um 4:50 Uhr

Benutzer-Avatar
NullPoièteя

Sie können dies mit der folgenden Funktion überprüfen:

function isValidMd5($md5 ='')
{
    return preg_match('/^[a-f0-9]{32}$/', $md5);
}

echo isValidMd5('5d41402abc4b2a76b9719d911017c592');

Der MD5 (Message-Digest-Algorithmus) Hash wird normalerweise im Textformat als 32-stellige Hexadezimalzahl ausgedrückt.

Diese Funktion prüft Folgendes:

  1. Es enthält nur Buchstaben und Ziffern (af, 0-9).
  2. Es ist 32 Zeichen lang.

  • Das !empty check ist da völlig überflüssig.

    – verzeihen

    13. Januar 2013 um 4:39 Uhr

  • Warum müssen Sie prüfen, ob es leer ist? Wird es nicht bereits false zurückgeben, wenn preg_match() stimmt nicht überein?

    – Inhan

    13. Januar 2013 um 4:39 Uhr

  • Es wird 0 zurückgegeben, wenn es nicht übereinstimmt, synonym mit false. +stimme @inhan

    – tsujp

    13. Januar 2013 um 4:42 Uhr

  • @hellohellosharp ja, Dokumentation liest Returns the hash as a 32-character hexadecimal number. was bedeutet, dass der Wert bestehen sollte aus 0-9 und a-f Zeichen und sollte 32 Zeichen lang sein.

    – Inhan

    13. Januar 2013 um 4:44 Uhr


  • @hellohellosharp Niemand scheint Ihren Kommentar zur Genauigkeit beantwortet zu haben: Diese Funktion überprüft, ob eine Zeichenfolge das Format eines MD5-Hash hat, sie validiert dies nicht ist ein tatsächliches gehashtes Passwort – das kann nicht bestimmt werden. Es wird auch true zurückgeben, wenn einer Ihrer ungehasht Passwörter erfüllt die Formatanforderungen – aber das ist unwahrscheinlich.

    – Jan Doggen

    26. Februar 2014 um 14:46 Uhr


Vielleicht etwas schneller:

function isValidMd5($md5 ='') {
  return strlen($md5) == 32 && ctype_xdigit($md5);
}

  • +1, wahrscheinlich schneller und auch besser lesbar als die Regex. Bei den meisten ungültigen Zeichenfolgen kann der Aufruf von strlen vorzeitig beendet werden. Dann vermute ich, dass der Aufruf von ctype_xdigit schneller ist als das Ausführen einer Regex-Engine.

    – Laurent

    18. April 2014 um 1:57 Uhr


  • @non: Ich stimme dir nicht zu. Sie können sich zu 100 % sicher sein, dass die Zeichenfolge ein gültiger md5-Hash ist. Ob der String ein gültiger md5-Hash sein sollte, ist ein ganz anderer Punkt.

    – RaffaelH

    29. April 2014 um 11:23 Uhr


  • @non: Noch einmal, “e4bfb280c702635cf71d46a0c8c33b96” ist zu 100 Prozent ein gültiger md5-Hash, Sie können nicht sicher sein, ob es einer sein sollte. Wenn es Ihr Passwort ist, dann ist es sowohl gültiges md5 als auch Ihr einfaches Passwort.

    – RaffaelH

    30. Juni 2014 um 13:45 Uhr

  • Ja, Sie können nicht 100% sicher sein, dass es sich um einen md5-String handelt, dazu müssen Sie Folgendes verwenden: !ctype_digit($md5) && ctype_lower($md5) && ctype_alpha($md5)

    – VeeeneX

    8. Mai 2015 um 13:02 Uhr

  • @VeeeneX Die Antwort kommt vielleicht etwas spät, aber was Sie vorschlagen, ist einfach komplett bs und ich möchte das klarstellen. Ich gehe davon aus, dass der md5-Hash wie alle anderen hier auch als Hex-String dargestellt wird. Es kann und wird meistens Ziffern enthalten, also ist !ctype_digit falsch. Es muss kein Kleinbuchstabe sein, also ist ctype_lower falsch, nichts falsch mit Großbuchstaben-Hashes. Es darf keine Zeichen über f hinaus haben, also ist ctype_alpha falsch.

    – RaffaelH

    20. Juni 2017 um 19:25 Uhr

1310930cookie-checkÜberprüfen Sie, ob die Zeichenfolge ein MD5-Hash ist

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy