![]() |
md5-Funktion versagt bei größeren Strings
Delphi-Quellcode:
Bei kleineren Strings kommt noch der richtige Hash raus, aber bei größeren ist er immer "53ceefef504648ec8063411a1fa3d1c2". Wo liegt denn das Problem?
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; |
Re: md5-Funktion versagt bei größeren Strings
Zitat:
woher ist den denn Unit "WCrypt2" ? |
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? |
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. |
Re: md5-Funktion versagt bei größeren Strings
|
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 |
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. |
Re: md5-Funktion versagt bei größeren Strings
Nimm einfach eine andere MD5 Implementation -- gibt ja genug davon.
|
Re: md5-Funktion versagt bei größeren Strings
So ich hab jetzt das hier gennomen:
http://assarbad.net/stuff/!export/md5.zip Zitat:
Delphi-Quellcode:
Bekommt man das weg?
// Write new 'state' back
State[0] := State[0] + a; Oder Soll ich was anderes nehmen? |
Re: md5-Funktion versagt bei größeren Strings
Eventuell ist der Überlauf geplant ... und man müßte nur die Prüfung abschalten. :gruebel:
|
Re: md5-Funktion versagt bei größeren Strings
|
Re: md5-Funktion versagt bei größeren Strings
Also ich habe mit der Unit von Assarbad keine Probleme gehabt.
|
Re: md5-Funktion versagt bei größeren Strings
Liste der Anhänge anzeigen (Anzahl: 1)
konnte mir auch nicht denken, daß die schon so lange bei ihm rumliegt und sich sonst noch keiner beschwert hat ...
drum hab ich ja die Bereichsüberprüfung im Verdacht, da Jene meistens deaktiviert ist. @Ruio: ist die Bereichsprüfung bei dir aktiv? (siehe Projektoptionen) wenn ja, dann schalt diese mal ab, oder (was wohl besser ist), füge folgende Zeile in die md5.pas ein
Code:
[b]unit[/b] MD5;
[color=#ff0000][b]{$OVERFLOWCHECKS OFF}[/b][/color] [b]interface[/b] |
Re: md5-Funktion versagt bei größeren Strings
Ich glaub die ist aktiviert, aber ich nehm das jetzt das mit den Indys.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:57 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