AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

MD5 Hash Verständnis Problem

Ein Thema von Astartes · begonnen am 30. Okt 2007 · letzter Beitrag vom 31. Okt 2007
Antwort Antwort
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#1

Re: MD5 Hash Verständnis Problem

  Alt 31. Okt 2007, 02:45
Zitat:
Delphi-Quellcode:
 
 Function MD5Hash(APWD: String): String;
    Begin
      With THash_MD5.Create Do
      Try
        Init;
        Calc(APwd, Length(APwd));
        Done;

        Result := DigestStr(TFormat_HEX);
      Finally
        Free;
      End;
    End;
Entweder bseitigst du den Fehler aus obigem Source oder benutzt gleich

Result := THash_MD5.CalcBinary(APWD, TFOrmat_HEX); Der Fehler im obigen source ist

Delphi-Quellcode:
Calc(APwd[1], Length(APwd));

// oder

Calc(PChar(APwnd)^, Length(APwnd)); // TypCast LongString nach PChar mit anschließnder Dereferenzierung des zeigers
APwd -> Type LongString und damit ein Pointer auf eine interne PLongStringRec Datenstruktur und nicht dem eigentlichen String.

MD5 als Hash funktion kann in sogenannten MDC -> Message Digest Cipher auch als Verschlüsselung benutzt werden, auch wenn ich das persönlich für ein schlechtes Vorgehen erachte. Man kann also mit MD5 auch Daten verschlüsseln, damit ist dieses Verfahren dann auch eine Verschlüsselungsfunktion.


Ach und nochwas. Deine Art ein Passwort in einen Sessionkey umzuwandlen bzw. es zu schützen ist unsicher. Es lassen sich auf diese Weise zb. Brute Force Angriffe per Rainbow Tabellen anwenden. Besser ist es so

Delphi-Quellcode:
function HashPassword(const Password: String; const HashClass: TDECHashClass = THash_MD5): String;
var
  Salt: Binary;
begin
  Salt := RandomBinary(16);
  Result := TFormat_HEX.Encode(Salt) + ValidHash(HashClass).KDFx(Password, Salt, 16, TFormat_HEX);
end;
Wir erzeugen einen Zufallswert, 16 Bytes lang, und hashen diesen per KDF -> Key Derivation Function -> Schlüsselableitungfunktion auf sichere Weise. So entsteht ein 32 Bytes langer Wert der in den ersten 16 Bytes den Salt speichert und in den zweiten 16 bytes den Output der KDF zum Salt + Password.
Wollte man nun per Rainbow Tabellen auf ein so umgewandeltes Passwort eine Brute Force Attacke durchführen, also ein Wörterbuch benutzen, so benötigte man bei 16 Bytes langen Keys nicht mehr nur 2^128 Einträge pro Dictionary sondern 2^128 * 2^128. Also für jedes einzelne Password müsste man eine eigene Rainbow Tabelle erzeugen.

Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz