delphi4arab منتديات دلفي للعرب
حساب md5 بأستخدام winAPI - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : حساب md5 بأستخدام winAPI (/showthread.php?tid=3164)



حساب md5 بأستخدام winAPI - cargem - 09-06-2011

لماذا تظهر النتيجة خطا
استخدم DXE
PHP كود :
const
  
PROV_RSA_FULL = 1;
  
CRYPT_VERIFYCONTEXT = 4026531840;
  
CALG_MD5 = 32771;
  
HP_HASHVAL = 2;
  
ADVAPI32 = 'advapi32.dll';

type
  HCRYPTPROV 
= ULONG;
  
PHCRYPTPROV = ^HCRYPTPROV;
  
HCRYPTHASH = ULONG;
  
PHCRYPTHASH = ^HCRYPTHASH;
  
ALG_ID = ULONG;
  
HCRYPTKEY = ULONG;
  
PHCRYPTKEY = ^HCRYPTKEY;

function 
CryptAcquireContext(phProv: PHCRYPTPROV; pszContainer: PAnsiChar;
  
pszProvider: PAnsiChar; dwProvType: DWORD; dwFlags: DWORD): BOOL; stdcall;
  
external ADVAPI32 name 'CryptAcquireContextA';
function 
CryptReleaseContext(hProv: HCRYPTPROV; dwFlags: DWORD): BOOL; stdcall;
  
external ADVAPI32 name 'CryptReleaseContext';
function 
CryptCreateHash(hProv: HCRYPTPROV; Algid: ALG_ID; hKey: HCRYPTKEY;
  
dwFlags: DWORD; phHash: PHCRYPTHASH): BOOL; stdcall;
  
external ADVAPI32 name 'CryptCreateHash';

function 
CryptHashData(hHash: HCRYPTHASH; const pbData: PBYTE; dwDataLen: DWORD;
  
dwFlags: DWORD): BOOL; stdcall; external ADVAPI32 name 'CryptHashData';

function 
CryptGetHashParam(hHash: HCRYPTHASH; dwParam: DWORD; pbData: PBYTE;
  
pdwDataLen: PDWORD; dwFlags: DWORD): BOOL; stdcall;
  
external ADVAPI32 name 'CryptGetHashParam';
function 
CryptDestroyHash(hHash: HCRYPTHASH): BOOL; stdcall;
  
external ADVAPI32 name 'CryptDestroyHash';

function 
CalcMD5(const AString: string): string;
var
  
hProv: HCRYPTPROV;
  
hHash: HCRYPTHASH;
  
pBuff, p: PBYTE;
  
i, ALen: Cardinal;
begin
  Result 
:= '';
  
pBuff := nil;
  if 
CryptAcquireContext(@hProv, nil, nil, PROV_RSA_FULL,
    
CRYPT_VERIFYCONTEXT) then
    
try
      if 
CryptCreateHash(hProv, CALG_MD5, 0, 0, @hHash) then
      begin
        
if CryptHashData(hHash, @AString[1], Length(AString), 0) then
        begin
          
if CryptGetHashParam(hHash, HP_HASHVAL, nil, @ALen, 0) then
          begin
            GetMem
(pBuff, ALen);
            
p := pBuff;
            if 
CryptGetHashParam(hHash, HP_HASHVAL, pBuff, @ALen, 0) then
              
for i := 1 to ALen do
              
begin
                Result 
:= Result + IntToHex(p^, 2);
                
Inc(p);
              
end;
          
end;
        
end;
      
end;
    finally
      if 
Assigned(pBuff) then
        FreeMem
(pBuff, ALen);
      
CryptDestroyHash(hHash);
      
CryptReleaseContext(hProv, 0);
    
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1
.Text := CalcMD5('delphi4arab');
end; 



حساب md5 بأستخدام winAPI - cargem - 10-06-2011

ممكن تصحيح لهذا الكود
ابحث عن مثال يستخدم HMAC hash


حساب md5 بأستخدام winAPI - Agmcz - 13-06-2011

السلام عليكم
تم تصحيح المشروع
بالتوفيق


حساب md5 بأستخدام winAPI - cargem - 14-06-2011

انت صديقي من الان
100/100
سوف ادرس الكود وبالرد عليك
تحياتي


حساب md5 بأستخدام winAPI - cargem - 14-06-2011

اخي rami هذا الكود ليس D7
اي اصدار؟


حساب md5 بأستخدام winAPI - Agmcz - 14-06-2011

قمت بتعديله باستخدام xe
ولم اجربه في اصدار آخر


حساب md5 بأستخدام winAPI - cargem - 15-06-2011

اخي رامي ممكن تعدل في هذا المثال