Rev napisał(a)
SZERLOKU! Jak zapewne wiesz (chociaż prawdopodobnie nie), md5 operuje tak naprawdę na bajtach. Żeby uzyskać hash z napisu trzeba go zamienić na ciąg bajtów. Jak pewnie wiesz (prawdopodobnie nie), każda litera ma w danym kodowaniu przyporządkowaną wartość liczbową. Jak pewnie wiesz (prawdopodobnie nie) DUŻE i małe litery to NIE są te same znaki.
Gdybyś nie był tak bardzo przeświadczony o swojej nieomylności i nie zwalał winy na wszystko naokoło, wliczając w to biblioteki, które były używane z powodzeniem przez wiele osób i wkleił swój kod w pierwszym poście, problem byłby rozwiązany w drugim.
Nie SZERLOKU, nie wiem ze md5 operuje na bajtach :) o tym by zamienic ciag bajtow NIE wiedziałem :) To ze kazda litera ma przypadkowa wartość liczbową, wiedziałem :) o duzych i małych znakach wiedzialem :) A jezeli chodzi o ta biblioteke to faktycznie dziala, bo sam z niej korzystałem dlugo, ale dodajac salt naprawde nie zadziałało mi. Podając wam gotowiec, też nie powiedzieliście czy działa, czy nie :) Jedno jest zabawne (dla mnie).. Ze ty zwalajac teraz cala wine na mnie.. mowiac ze to moja wina a ja obwiniam komponenty.. moja odpowiedz jest krotka i mam nadzieje ze da cos do myslenia bo normalne to nie jest..
Uzylem innej funkcji z google.. Tamta biblioteke usunalem.. Uzylem dokladnie tego samego kodu i wszystko DZIALA... wiec jezeli to naprawde byla moja wina... czemu teraz to dziala? Gdy nic nie zmienialem? Bez sensu dyskutowac.. Napisałem by otrzymać pomoc od Was a nie sie klocic.. Wiec koncze to.
Funkcja ktora rozwiazala sprawe bez bicia:
function md5(const Input: String): String;
var
hCryptProvider: HCRYPTPROV;
hHash: HCRYPTHASH;
bHash: array[0..$7f] of Byte;
dwHashBytes: Cardinal;
pbContent: PByte;
i: Integer;
begin
dwHashBytes := 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) * sizeof(Char), 0) then
begin
if CryptGetHashParam(hHash, HP_HASHVAL, @bHash[0], @dwHashBytes, 0) then
begin
for i := 0 to dwHashBytes - 1 do
begin
Result := Result + Format('%.2x', [bHash[i]]);
end;
end;
end;
CryptDestroyHash(hHash);
end;
CryptReleaseContext(hCryptProvider, 0);
end;
Result := AnsiLowerCase(Result);
end;
Wiec powiem jeszcze raz:
Uzyłem tego samego sposoby liczenia, i wszystko dziala.. Problem jednak był po stronie tego starego komponentu