Конференция "WinAPI" » CryptoAPI (Delphi 2010, XP SP3) [D7, WinXP]
 
  • tytus © (06.07.10 12:36) [0]
    Добрый день мастера.
    Вот решил разобраться с шифрованием файлов паролем.
    с шифрованием все ок. А вот при дешифровке GetLastError выдает $00000057 - параметр задан неверно.

    var
     hProv: HCRYPTPROV;
     hash: HCRYPTHASH;
     key: HCRYPTKEY;
     FOrig: File;
     Data: PByte;
     d, dw: DWORD;
    begin
    //Шифрование
     CryptAcquireContextW(@hProv, nil, nil, PROV_RSA_FULL,
       CRYPT_VERIFYCONTEXT);
     CryptCreateHash(hProv, CALG_SHA, 0, 0, @hash);
     CryptHashData(hash, @aPassw[1], Length(aPassw), 0);
     CryptDeriveKey(hProv, CALG_RC4, hash, 0, @key);
     FTempStream := TMemoryStream.Create;
     AssignFile(FOrig, FOrigFileName);
     Reset(FOrig, 1);
     GetMem(Data, 512);
     try
       while not EOF(FOrig) do
       begin
         BlockRead(FOrig, Data^, 512, d);
         if CryptEncrypt(Key, 0, EOF(FOrig){false}, 0, data, @d, d) = true then
           FTempStream.Write(data^, d);
       end;
     finally
       FreeMem(Data, 512);
     end;
     CloseFile(FOrig);
     FTempSTream.Seek(0, soFromBeginning);
     RE1.Lines.LoadFromStream(FTempStream);
     FTempStream.Free;

    // Дешифрование
    // все тоже самое, только
     if CryptDecrypt(Key, 0, EOF(FOrig), 0, data, @d) = true then
       FTempStream.WriteBuffer(data^, d);



    Подскажите - как с этим бороться.
  • tytus © (06.07.10 13:36) [1]
    Дошло, блин..
    Зашифрованые данные я выводил в MemoryStream а потом в TRichEdit, и сохранял RichEdit.Lines.SaveToFile(aFileName);

    А нужно было сохранять - MemoryStream.SaveToFile(aFileName);

    Теперь все нормально.

    Возможно дело в отличии кодировок исходного файла и RichEdit.
 
Конференция "WinAPI" » CryptoAPI (Delphi 2010, XP SP3) [D7, WinXP]
Есть новые Нет новых   [134465   +0][b:0][p:0.002]