delphi4arab منتديات دلفي للعرب
كيف يمكن تشفير النصوص بأستخدام win API - نسخة قابلة للطباعة

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



كيف يمكن تشفير النصوص بأستخدام win API - cargem - 23-06-2011

لماذا لا يعمل هذا الكود على دلفي 7
مطلوب تحصيح الكود

كود :
function Digest(Str1, Passward: string): string; const aMicrosoftEnhan = 'Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider'; var hProv: HCRYPTPROV; hHash: HCRYPTHASH; hKey: HCRYPTKEY; hHmacHash: HCRYPTHASH; pbHash: PByte; dwDataLen: DWORD; KeyAsByte: PByte; CommandAsByte: PByte; HmacInfo: HMAC_INFO; i: integer; Key: ansistring; // Decoder: TIdDecoderMIME; // Uri: TidUri; // Encoding: TEncoding; Firma: string; // Encoder: TIdEncoderMIME; begin hProv := 0; hHash := 0; hKey := 0; hHmacHash := 0; pbHash := nil; dwDataLen := 0; // Decoder := TIdDecoderMIME.Create; // Uri := TidUri.Create(Url); // Encoding := TEncoding.Create; // Encoder := TIdEncoderMIME.Create; try // Key := StringReplace(Base64Key, '-', '+', [rfReplaceAll]); // Key := StringReplace(Key, '_', '/', [rfReplaceAll]); KeyAsByte :=PByte(Str1); //PByte(Decoder.DecodeBytes(Key)); CommandAsByte :=PByte(Passward) ;//PByte(Encoding.ASCII.GetBytes(Uri.GetPathAndParams)); ZeroMemory(@HmacInfo, sizeof(HmacInfo)); HmacInfo.HashAlgid := CALG_MD5; if not CryptAcquireContext(@hProv, nil, aMicrosoftEnhan, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) then raise ESysError.Create('Error in AcquireContext'); if not CryptCreateHash(hProv, CALG_MD5, 0, 0, @hHash) then raise ESysError.Create('Error in CryptCreateHash'); if not CryptHashData(hHash, @KeyAsByte[0], sizeof(KeyAsByte), 0) then raise ESysError.Create('Error in CryptHashData'); if not CryptDeriveKey(hProv, CALG_RC2, hHash, CRYPT_EXPORTABLE, @hKey) then raise ESysError.Create('Error in CryptDeriveKey'); if not CryptCreateHash(hProv, CALG_HMAC, hKey, 0, @hHmacHash) then raise ESysError.Create('Error in CryptCreateHash'); if not CryptSetHashParam(hHmacHash, HP_HMAC_INFO, @HmacInfo, 0) then raise ESysError.Create('Error in CryptSetHashParam'); if not CryptHashData(hHmacHash, @CommandAsByte[0], sizeof(CommandAsByte), 0) then raise ESysError.Create('Error in CryptHashData 0x%08x'); if not CryptGetHashParam(hHmacHash, HP_HASHVAL, nil, @dwDataLen, 0) then raise ESysError.Create('Error in CryptGetHashParam'); GetMem(pbHash, dwDataLen); if not CryptGetHashParam(hHmacHash, HP_HASHVAL, pbHash, @dwDataLen, 0) then raise ESysError.Create('Error in CryptGetHashParam'); Firma := ''; for i := 0 to dwDataLen - 1 do Firma := Firma + Format('%.2x', [pbHash[i]]); // Firma := Encoder.EncodeString(Firma); // Firma := StringReplace(Firma, '+', '-', [rfReplaceAll]); // Firma := StringReplace(Firma, '/', '_', [rfReplaceAll]); result := Firma; finally if hHmacHash <> 0 then CryptDestroyHash(hHmacHash); if hKey <> 0 then CryptDestroyKey(hKey); if hHash <> 0 then CryptDestroyHash(hHash); if hProv <> 0 then CryptReleaseContext(hProv, 0); if pbHash <> nil then FreeMem(pbHash); (* Decoder.Free; Uri.Free; Encoding.Free; Encoder.Free; *) end; end; procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Text := 'Key=' + Digest(Edit1.Text, Edit2.Text); end;



كيف يمكن تشفير النصوص بأستخدام win API - cargem - 23-06-2011

use:Wcrypt2


كيف يمكن تشفير النصوص بأستخدام win API - Agmcz - 23-06-2011

السلام عليكم
مادا تريد ان تفعل بالضبط
تشفير أم حساب هاش
وما نوعه
التشفير أو الهاش


كيف يمكن تشفير النصوص بأستخدام win API - cargem - 23-06-2011

ان قلت تشفير فأن TEncoding غير موجود في d7
مطلوب الهاش الناتج من هذه العملية

هنا المشكلة
إقتباس : for i := 0 to dwDataLen - 1 do
Firma := Firma + Format('%.2x', [pbHash[i]]);
d7 لايعتبر pbHash كا array


كيف يمكن تشفير النصوص بأستخدام win API - kachwahed - 24-06-2011

إقتباس :use:Wcrypt2
ابحث عن المكتبة ضمن مشروع Jedi
كود :
http://www.delphi-jedi.org/
أو في النت:
كود :
http://www.google.com/codesearch#dzv7oUzpA6Y/trunk/TVScanner2007.D2006%20V1.0.1.2/componenten/EmbeddedWB_D2005/Source/Wcrypt2.pas&q=HCRYPTPROV%20lang:^pascal$&type=cs



كيف يمكن تشفير النصوص بأستخدام win API - cargem - 24-06-2011

المكتبة موجودة ضمن المثال
المشكلة هنا
إقتباس :pbHash: PByte;
في DXE يقوم بوضائف كثيرة (كا array) لكن في D7 لا

التوابع تعمل بشكل جيد
ينبغي تحويل PByte
TpbHash:array of PByte;

وهنا تتوجب ال****** منكم
تحياتي


كيف يمكن تشفير النصوص بأستخدام win API - cargem - 24-06-2011

هذا المثال رفعته لكم لمن يريد المحاولة