Der MD5-Algorithmus (Message Digest Algorithm 5), 1991 von Donald M.
Rivest entwickelt, erzeugt aus einem beliebig langen Text einen 128-Bit
langen Streuwert (Hash), mit dem dieser eindeutig identifiziert werden kann.
Dieser Streuwert wird zumeist als 32-stellige Hexadezimalzahl notiert und
ist u.a. sehr weit verbreitet bei der Integritätsprüfung. So speichern z.B.
viele Internet-Shops die Zugangspasswörter ihrer Kunden nicht im Klartext in
ihrer Datenbank, sondern als MD5-Hash. Loggt sich der Kunde ein, so wird aus
seiner Eingabe der MD5-Hash ermittelt und mit dem Gegenstück aus der
Datenbank verglichen.
MD5 ist sicher, da zum einen aus einem erzeugten Hash-Wert nicht der
Ursprungstext ermittelt werden kann und zum anderen der Algorithmus
kollisionsfrei ist bzw. sein soll. Mit kollisionsfrei meint man, dass aus
zwei unterschiedlichen Texten niemals der gleiche Hash-Wert berechnet werden
kann. MD5 ist dabei etwas ins Gerede geraten, da es chinesischen
Mathematikern anscheinend gelungen ist, für die komplette Funktion
Kollisionen zu finden. Dies bedeutet jedoch nicht, dass MD5 mit einem Male
unsicher ist. Ein paar Jahre und Rechnergenerationen wird es wohl noch
dauern, bis der Algorithmus geknackt ist.
Beispiel-MD5-Hash für den Satz "Lorem ipsum dolor sit amet": fea80f2db003d4ebc4536023814aa885.
Ändert man nun nur einen Buchstaben des Satzes, so erzeugt die Funktion
einen komplett anderen Streuwert: "Loren ipsum dolor sit amet": 1daa85486bc99e1b09f60e71e98ca65d.
In vielen Programmiersprachen gibt es fertige Lösungen oder Ansätze,
mit denen man diese Streuwerte ermitteln kann. Unter PHP z.B. genügt der
Aufruf der eingebauten Funktion md5.
Im klassischen ASP sieht es dagegen etwas anders aus.
Eine integrierte Funktion gibt es leider nicht. Man kann sich jedoch der
zahlreichen Implementierungen von findigen Programmierern bedienen, die
Ihren Code im Internet veröffentlicht haben. Hervorzuheben ist dabei der
Code von Frez Systems,
die, neben einem VB6-Modul, auch eine ASP-Version zum
Download
anbieten.
Anders sieht die Sache in ASP.NET aus. Bereits in
Version 1.1. kann man über die Funktion ComputeHash des Objekts
System.Security.Cryptography.MD5CryptoServiceProvider einen
Wert nach MD5 hashen. Das daraus resultierende Byte-Array muss man nun noch
in Hexadezimalzahlen umwandeln.
Etwas komfortabler geht mit mit der Funktion
HashPasswordForStoringInConfigFile der Klasse
System.Web.Security.FormsAuthentication. Diese erledigt alles in
einem Rutsch und ist sogar in der Lage neben MD5- auch SHA1-Streuwerte zu
erzeugen. Die Funktion ist eigentlich dazu gedacht Passwörter für
Zugangsdaten von ASP.NET-Anwendungen zu verschlüsseln, die man in der Datei
web.config hinterlegen will (Stichwort: credentials). Sie eignet sich aber
hervorragend um bequem an MD5-Hashes heranzukommen. Viel Code dabei nicht
notwendig:
<%@ Page Language="vb" %>
<%@ Import Namespace="System.Net" %>
<script runat="server">
Function HashMD5(strText As String) As String
If strText = Nothing Then strText = ""
HashMD5 = System.Web.Security.FormsAuthentication. _
HashPasswordForStoringInConfigFile(strText, "md5")
End Function
</script>
<%
Dim strText As String
Dim strHash As String
strText = Request.QueryString("text")
strHash = HashMD5(strText)
Response.Write(strText & " >>> " & strHash)
%>