Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi md5-Funktion versagt bei größeren Strings (https://www.delphipraxis.net/129347-md5-funktion-versagt-bei-groesseren-strings.html)

Ruio 17. Feb 2009 15:11


md5-Funktion versagt bei größeren Strings
 
Delphi-Quellcode:
uses WCrypt2;
...
function md5(const Input: String): String;
var
  hCryptProvider: HCRYPTPROV;
  hHash: HCRYPTHASH;
  bHash: array[0..$7f] of Byte;
  dwHashLen: DWORD;
  pbContent: PByte;
  i: Integer;
begin
  dwHashLen := 16;
  pbContent := Pointer(PChar(Input));

  Result := '';

  if CryptAcquireContext(@hCryptProvider, nil, nil, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT or CRYPT_MACHINE_KEYSET) then
  begin
    if CryptCreateHash(hCryptProvider, CALG_MD5, 0, 0, @hHash) then
    begin
      if CryptHashData(hHash, pbContent, Length(Input), 0) then
      begin
        if CryptGetHashParam(hHash, HP_HASHVAL, @bHash[0], @dwHashLen, 0) then
        begin
          for i := 0 to dwHashLen - 1 do
          begin
            Result := Result + Format('%.2x', [bHash[i]]);
          end;
        end;
      end;
      CryptDestroyHash(hHash);
    end;
    CryptReleaseContext(hCryptProvider, 0);
  end;

  Result := AnsiLowerCase(Result);
end;
Bei kleineren Strings kommt noch der richtige Hash raus, aber bei größeren ist er immer "53ceefef504648ec8063411a1fa3d1c2". Wo liegt denn das Problem?

Sharky 17. Feb 2009 15:27

Re: md5-Funktion versagt bei größeren Strings
 
Zitat:

Zitat von Ruio
... Wo liegt denn das Problem?

Hai Ruio,

woher ist den denn Unit "WCrypt2" ?

Cyberbob 17. Feb 2009 15:31

Re: md5-Funktion versagt bei größeren Strings
 
Ich schließe mich der Frage an. Vielleicht leigt der Fehler gar nicht bei deinem Code! Hast du den Quellcode der Crypt-Lib?
Ab wann tritt der Fehler denn auf?

Ruio 17. Feb 2009 15:33

Re: md5-Funktion versagt bei größeren Strings
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich häng die unit mal an.

ich habe nur gemerkt, dass die Hashs bei größeren Strings immer gleich sind.

nahpets 17. Feb 2009 15:35

Re: md5-Funktion versagt bei größeren Strings
 
Hallo,

wcrypt2 gibt es hier:

http://www.koders.com/delphi/fid9FA8...px?s=algorithm

gammatester 17. Feb 2009 15:55

Re: md5-Funktion versagt bei größeren Strings
 
Enthält input #0-Zeichen (oder Unicode)? Dann sind's vielleicht Probleme mit dem PChar-Typecast.

Gammatester

Ruio 17. Feb 2009 16:01

Re: md5-Funktion versagt bei größeren Strings
 
Och nö, nicht schon wieder :kotz:
Dann muss ich wohl anders überprüfen ob eine Datei noch aktuell ist.

Luckie 17. Feb 2009 16:17

Re: md5-Funktion versagt bei größeren Strings
 
Nimm einfach eine andere MD5 Implementation -- gibt ja genug davon.

Ruio 17. Feb 2009 17:40

Re: md5-Funktion versagt bei größeren Strings
 
So ich hab jetzt das hier gennomen:
http://assarbad.net/stuff/!export/md5.zip
Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt ist eine Exception der Klasse EIntOverflow mit der Meldung 'Integerüberlauf' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Zeile 445
Delphi-Quellcode:
// Write new 'state' back
  State[0] := State[0] + a;
Bekommt man das weg?
Oder Soll ich was anderes nehmen?

himitsu 17. Feb 2009 18:10

Re: md5-Funktion versagt bei größeren Strings
 
Eventuell ist der Überlauf geplant ... und man müßte nur die Prüfung abschalten. :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:00 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz