28.08.2003 15:18:53Вызов CryptEncrypt! SOS Ответов: 1
Pavel
Подскажите, плз, что неправильно в вызове CryptEncrypt? Почему валится все?

procedure TForm1.Button5Click(Sender: TObject);
var
CryptAcquireContextProc:TCryptAcquireContextProc;
CryptGenKeyProc:TCryptGenKeyProc;
CryptEncryptProc:TCryptEncryptProc;
CryptDecryptProc:TCryptDecryptProc;
Handle: THandle;
//Параметры для функций
//CPAcquireContext
phProv: HCRYPTPROV;
pszContainer: LPCSTR;
pszProvider: LPCSTR;
dwProvType: DWORD;
dwFlags: DWORD;
//CPGenKey
Algid: ALG_ID;
phKey: HCRYPTKEY;
//CPEncrypt
hHash: HCRYPTHASH;
Final: BOOL;
pbData: PBYTE;
pdwDataLen: DWORD;
dwBufLen: DWORD;

D: Array[1..160] of char;
Ptr: Pointer;
Name,Data: String;
begin
Handle := LoadLibrary(’advapi32.dll’);
if Handle <> 0 then
begin
@CryptAcquireContextProc := GetProcAddress(Handle, &rsquo;CryptAcquireContextA&rsquo;);
@CryptGenKeyProc := GetProcAddress(Handle, &rsquo;CryptGenKey&rsquo;);
@CryptEncryptProc := GetProcAddress(Handle, &rsquo;CryptEncrypt&rsquo;);

// Создание контекста провайдера
phProv:=0;
pszContainer:=Nil;
pszProvider:= CP_DEF_PROV;
dwProvType:=PROV_GOST_DH;
dwFlags:=CRYPT_MACHINE_KEYSET;
if not CryptAcquireContextProc(phProv,pszContainer,pszProvider,dwProvType,dwFlags) then
ShowMessage(IntToStr(GetLastError) + &rsquo; CryptAcquireContextProc&rsquo;);

ALGID:= CALG_GR3410;//CALG_G28147_IMIT;
dwFlags:=0;
If not CryptGenKeyProc(phProv,ALGID,dwFlags,phKey) then
ShowMessage(IntToStr(GetLastError) + &rsquo; CryptGenKeyProc&rsquo;);

dwFlags:= 0;
hHash:=0;// хэш не нужен
Final:=TRUE;//последний блок
Data:= &rsquo;CCCCCCCC&rsquo;;
Ptr := AllocMem(Length(Data));
pbData:= Ptr;
StrPCopy(PChar(Ptr), Data);

pdwDataLen:= Length(Data);
dwBufLen:= 1000;

If not CryptEncryptProc(phKey,0,Final,dwFlags,pbData,pdwDataLen,dwBufLen) then
ShowMessage(IntToStr(GetLastError) + &rsquo; CryptEncryptProc&rsquo;);

FreeLibrary(Handle);
end;
end;

 
Ответы:
28.08.2003 16:38:31uri
Потому что Вы пытаетесь шифровать на ключах, которые для этого не предназначены! Можно шифровать только на сессионных ключах. В данном форуме шифрование уже много раз обсуждалось. Просмотрите, плз, его...