ASP.NET

MD5-Hashes mit ASP und ASP.NET erzeugen

Sichere Streuwerte z.B. für Authentifizierung berechnen

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)
%>
kick it on dotnet-kicks.de AddThis 0 wikio-Stimme(n) Trackback-Url...

5 Kommentare bislang...

  • Dieser Artikel ist nun fast drei Jahre alt, und MD5 gilt mittlerweile nicht mehr als sicher, da es leider beweiskräftig geknackt wurde. Selbst der Nachfolger SHA1 steht auf der Abschussliste. Doch unabhängig vom verwendeten Hash-Algorithmus kann man sehr stark zur Sicherheit von Passwort-Hashes beitragen, indem man Gebrauch von den sog. "Salted Hashes" macht. Wie das funktioniert und welche Vorteile das hat, ist schön nachzulesen in diesem Artikel zum Thema sichere Passwort-Hashes.
    5
    Aufschnürer : Dienstag, 26. August 2008 22:51
  • @Frank: In Bezug auf den Microsoft SQL-Server muss man sich die Methode MD5 wohl zunächst einmal selbst schreiben, da im Sprachumfang keine solche Funktion vorhanden ist. Bei MySQL ist das wohl anders. Das lässt sich vor allem mit einem SQL-Server ab Version 2000 relativ leicht lösen, denn kann man dort VB-Skripte einbinden.
    4
    Kristof : Samstag, 22. April 2006 12:02
  • Könnte man so auch eine md5-verschlüsselte ID direkt mit der in der Datenbank unverschlüsselten id vergleichen? Etwa "Select * From abc Where md5(id) = " & ID & "; " also als Funktion innerhalt einer SQL-Abfrage. Geht sowas? Bei Mysql ist das möglich. Würde das Arbeiten echt erleichtern;-)
    3
    Frank : Freitag, 21. April 2006 21:55
  • @ Henry: Ich bin mir nicht sicher, ob ich weiss, was Du meinst. Der Einsatz von MD5 beim Login ist deshalb sinnvoll, da das Passwort eben nicht im Klartext übers Kabel geht, sondern nur dessen Hash-Wert, denman nicht zurückrechnen kann. Auf dem Server wird dann aus dem in der Datenbank abgelegten Klartext-Passwort ebenfalls der Hash ermittelt und beide Werte verglichen. Sind sie identisch, so ist das Login korrekt.
    Um dem Benutzer sein Passwort zu Anfang mitzuteilen, ist es natürlich und leider notwendig dieses einmal unverschüsselt per HTTP oder eMail auf die Reise zu schicken.
    2
    Kristof : Sonntag, 12. März 2006 15:39
  • funktioniert prima - aber nur beim Login !!!!!
    was ist wenn, wenn dem User das Passwort im Klartext zugesandt und aus der Datenbank geholt, und das nicht im Login.aspx stattfindet, werden soll ? da geht nix mehr mit FormsAuthentication - der gehashte Text kann nicht rückverwandlet werden ! -
    Welche Methode ist da anzuwenden ?
    1
    henry : Sonntag, 12. März 2006 07:27

Dein Kommentar hierzu...


Kommentar-Feed für diesen Beitrag
Gravatare werden unterstützt .:. eMail-Adressen werden nicht veröffentlicht
 

RSS-Feed

Die URL des Standard-Newsfeed von zerbit.de lautet:

http://www.zerbit.de/rssfeed.aspx

Login


 

 

Statistik



kürzlich kommentiert

Artikel 51

  • Datum: 11.12.2005
    Kategorie: ASP.NET
    Zugriffe: 2.770
    Kommentare: 5
    Trackbacks: 0

Letzte Beiträge

Kategorien

Buttons & More

Blog-Roll

Banner Piraten-Partei