Вниз
Скачать: CL | DM;

Криптография в Windows (Crypto API)   Найти похожие ветки 

 
ShPRO_TT   (2006-04-14 18:17) [0]

Приветствую всех!
Пишу универсальный менеджер криптопровайдеров Windows.
Возникает ошибка NTE_BAD_DATA при вызове CryptDecrypt.
ICQ#: 283-816-077
Шифрую следующим образом:

procedure Encrypt(in_,out_:TFileName);
var inp_file,out_file:file;
   pbBuffer:PByte;
   dwBlockLen:DWORD;
   dwBufferLen:DWORD;
   dwCount:DWORD;
begin
           AssignFile(inp_file,in_);
           AssignFile(out_file,out_);
           Reset(inp_file,1);
           Rewrite(out_file,1);
           dwBlockLen:=1000 - 1000 mod ENCRYPT_BLOCK_SIZE;
           if AlgTypeToStr(CurPar.cAlg_EN.aiAlgid)<>"&#239;&#238;&#242;&#238;&#247;&#237;&#251 ;&#233;" then
           dwBufferLen:=dwBlockLen+ENCRYPT_BLOCK_SIZE else
           dwBufferLen:=dwBlockLen;
           GetMem(pbBuffer,dwBufferLen);
           while not Eof(inp_file) do
             begin
             BlockRead(inp_file,pbBuffer^,dwBlockLen,dwCount);
             if CryptEncrypt(key,0,eof(inp_file),0,pbBuffer,@dwCount,dwBufferLen) then
             BlockWrite(out_file,pbBuffer^,dwCount) else
             ShowErrorMes(GetLastError);
             end;
            FreeMem(pbBuffer);
            CloseFile(inp_file);
            CloseFile(out_file);
            CryptDestroyKey(key);
end;

Расшифрование:

procedure Decrypt(in_,out_:TFileName);
var inp_file,out_file:file;
   pbBuffer:PByte;
   dwBlockLen:DWORD;
   dwBufferLen:DWORD;
   dwCount:DWORD;
begin
           AssignFile(inp_file,in_);
           AssignFile(out_file,out_);
           Reset(inp_file,1);
           Rewrite(out_file,1);
           dwBlockLen:=1000 - 1000 mod ENCRYPT_BLOCK_SIZE;
          dwBufferLen:=dwBlockLen;
           GetMem(pbBuffer,dwBufferLen);
           while not Eof(inp_file) do
             begin
             BlockRead(inp_file,pbBuffer^,dwBlockLen,dwCount);
             if CryptDecrypt(key,0,eof(inp_file),0,pbBuffer,@dwCount) then //ошибка возникает здесь!!!
             BlockWrite(out_file,pbBuffer^,dwCount) else
             ShowErrorMes(GetLastError);
             end;
            FreeMem(pbBuffer);
            CloseFile(inp_file);
            CloseFile(out_file);
            CryptDestroyKey(key);

end;


 
Chlavik ©   (2006-04-21 15:26) [1]

А где у тебя вызов CryptGenKey? Да и если уж юзаеш WinAPi то юзай CreateFile вместо AssignFile


 
ShPRO_TT   (2006-04-25 20:12) [2]

Создаю сессионный ключ по паролю.
CryptCreateHash(CPROV.cProvContext, CPROV.cAlg_HS.aiAlgid, 0, 0, @hash);
CryptHashData(hash, @passWD, length(PassWD), 0);
CryptDeriveKey(CPROV.cProvContext, CPROV.cAlg_EN.aiAlgid, hash, 0, @hkey);
А в CreateFile смысла нет!

У меня горит курсовик по Компьютерной безопасности. Не знаю что делать!
П-о-м-о-г-и-т-е!!!!!



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.026 c
2-1154272586
Nikolaich
2006-07-30 19:16
2006.08.20
TMessage


4-1143958737
RL
2006-04-02 10:18
2006.08.20
Ограничение доступа к папке


2-1154428209
DelphiLexx
2006-08-01 14:30
2006.08.20
external без описания имени модуля


2-1154196824
Gnoll
2006-07-29 22:13
2006.08.20
програмно открыть доступ к ресурсам


3-1150375985
Бульбаш
2006-06-15 16:53
2006.08.20
Итого по листу в Qreport




   Наверх