Die Community zu .NET und Classic VB.
Menü

FAQ 0075: Wo finde ich ein Beispiel für MD5?

 von 

Frage 

Wo finde ich ein Beispiel für MD5?

Hier geht es um VB Classic. Das Thema gibt es auch für .NET: MD5-Hash in VB.NET berechnen.

Antwort  

Wenn man etwas sucht, sollte man zuerst mal eine beliebige Suchmaschine befragen.
Google ist für die Qualität der Ergebnisse bekannt.

Aber natürlich haben wir auch etwas auf ActiveVB zu bieten: Verschlüsselungsklasse.
Diese ist zwar auf SHA ausgerichtet, man muß in der Funktion GetPasswordHash nur die Konstante CALG_SHA nach CALG_MD5 ändern, und schon kann man MD5 benutzen.

Zu beachten ist, daß MD5 ein Hash-Algorithmus ist und keine echte Verschlüsselung. Ein mittels MD5 kodierter Text läßt sich nicht dekodieren.

Ergänzung von Konrad Rudolph:
MD5 ist ein Hash, das heißt der erzeugte Code ist nicht dazu gedacht, zurückgerechnet zu werden. Außerdem ist der errechnete MD5-Code für alle möglichen Strings der Welt gleich lang!
Was folgert daraus? Es folgert daraus, daß es eine begrenzte Anzahl an möglichen MD5-Hashes gibt. Das heißt: aus unendlich wird endlich.
Wie geht das? Ganz einfach: indem einige Hashes doppelt sind. Es ist sehr schwer, doppelte MD5-Hashes zu finden, aber sie existieren (und um genau zu sein: es existieren unendlich viele).

Programme wie John The Ripper machen folgendes: sie knacken nicht den MD5-Hash, denn das ist wie gesagt unmöglich; stattdessen suchen sie einfach einen String, der den selben Hash ergibt. Daß das funktioniert, macht MD5 aber schon unsicher, denn eine Anforderung an einen kryptographisch sicheren Hash ist, daß es nicht (einfach) möglich ist, gleiche Hashes zu finden.

Aus diesem Grund sollte man MD5 nicht mehr verwenden, sondern neuere Standards, wie z.B. SHA-256 benutzen.

Anmerkung  

 Neu Vielfach wird behauptet, unsere Verschlüsselungsklasse gebe ein falsches Ergebnis zurück, weil der mit ihr erzeugte MD5-Hash anders aussieht als der, der in Perl oder PHP erzeugt wurde. Perl und PHP geben einen String zurück, in dem jedes Zeichen des erzeugten Hashes als hexadezimale Darstellung vorliegt (z. B. wird '41' statt 'A' angezeigt), die Verschlüsselungsklasse macht dies jedoch nicht. Das Ergebnis muß also noch umgerechnet werden, beispielsweise mit folgendem Code:

Dim i As Long
Dim strMD5 As String

'   Annahme: sHash enthält das Ergebnis der Verschlüsselungsklasse

strMD5 = vbNullString
For i = 1 To Len(sHash)
    strMD5 = strMD5 & Right$("0" & Hex$(Asc(Mid$(sHash, i, 1))), 2)
Next i

Listing 1: MD5-Hash als Hex-Folge darstellen

Ihre Meinung  

Falls Sie Fragen zu dieser FAQ haben, Ihre Erfahrung mit anderen Nutzern austauschen möchten oder auf eine Ergänzung hinweisen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.