![]() |
|
كيف يمكن تشفير النصوص بأستخدام 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 dod7 لايعتبر 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 هذا المثال رفعته لكم لمن يريد المحاولة |