Форум: "WinAPI";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
ВнизКриптография в 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)<>"ïîòî÷íû ;é" 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.039 c