Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi MD5Print umkehren String zu MD5Digest wandeln (https://www.delphipraxis.net/154600-md5print-umkehren-string-zu-md5digest-wandeln.html)

TUX_der_Pinguin 17. Sep 2010 08:45

MD5Print umkehren String zu MD5Digest wandeln
 
Hallo,

irgendwie stehe ich gerade auf dem Schlauch, ich habe eine MD5 Unit in mein Projekt eingebunden,
mit dieser Unit habe ich schon öfter gearbeitet. Jetzt habe ich mit Hilfe der Funktion MD5Print
einen MD5Digest in einen String gewandelt um ihn in einem Eingabefeld anzuzeigen. Jetzt würde ich
gern diesen String wieder in einen MD5Digest wandeln um ihn per FileStream in einer Datei zuspeichern.

Das Speichern ist kein Problem, nur wie bekomme ich meinen String wieder zurück in ein MD5Digest !?

:gruebel:

Ich hatte gedacht das wäre das normalste der Welt, aber ich konnte bisher nichts finden.

Bei String und Integer gehts ja auch, StrToInt & IntToStr aber bei MD5 gibt es nur die eine Richtung.

mfg

TUX

Satty67 17. Sep 2010 09:00

AW: MD5Print umkehren String zu MD5Digest wandeln
 
Der MD5 String ist ja nur die Hex-Darstellung der vier 32bit Werte.

Sir Rufo 17. Sep 2010 09:32

AW: MD5Print umkehren String zu MD5Digest wandeln
 
Kuckst du hier

TUX_der_Pinguin 17. Sep 2010 10:36

AW: MD5Print umkehren String zu MD5Digest wandeln
 
Vielen dank euch beiden, jetzt steh ich nicht mehr auf dem Schlauch :-D

Habe das auf jetzt wie folgt gelöst.

Delphi-Quellcode:
type
  MD5Digest: array[0..15] of byte;


function MD5Read(S: String): MD5Digest;
var
  i: Byte;
  c: Byte;

  function BaseToInt( const Value : string; const Base : Integer ) : Int64;
  var
    idx : Integer;
    pdx : Integer;
  begin
    if ( Base >= 2 ) and ( Base <= 36 ) then
      begin
        Result := 0;
        idx := 1;
        while idx <= Length( Value ) do
          begin
            Result := Result * Base;
            case Value[ idx ] of
              '0' .. '9' :
                pdx := Ord( Value[ idx ] ) - Ord( '0' );
              'A' .. 'Z' :
                pdx := Ord( Value[ idx ] ) - Ord( 'A' ) + 10;
              'a' .. 'z' :
                pdx := Ord( Value[ idx ] ) - Ord( 'a' ) + 10;
            else
              raise Exception.CreateFmt( 'Ungültiges Zeichen im Wert "%s" entdeckt!', [ Value ] );
            end;
            if pdx < Base then
              Result := Result + pdx
            else
              raise Exception.CreateFmt( 'Der Wert "%s" passt nicht zur Basis %d!', [ Value, Base ] );

            idx := idx + 1;
          end;
      end
    else
      raise Exception.CreateFmt( 'Basis %d ausserhalb des gülitigen Bereichs 2..36', [ Base ] );
  end;

begin

  c := 1;
  for i := 0 to 15 do begin
    result[i] := BaseToInt(Copy(S, c, 2), 16);
    Inc(c, 2);
  end;

end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:14 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