16.01.2003 12:26:29Глюк или поять мои кривые ручки ? Ответов: 5
Дима
При обращении к CryptoPro для шифрации/расшифрации текста (CPEncode, CPDecode)Неверно распаковываются первые 8 байт (вроде что-то типа синхропосылки в ГОСТ).баг или фича ?
 
Ответы:
16.01.2003 13:40:40kure
CPEncode/CPDecode ?

CPEncrypt может.
16.01.2003 17:18:02Дима
Абсолютно верно. Я неправильно указал название функции(вбивал по памяти). Так с чем это может быть связано?
16.01.2003 17:49:39kure
На первой страничке напишите в поиске cpencrypt. Там есть примеры.
17.01.2003 13:25:32Dima
Izvenite net russkogo yazika. Ya posmotrel primeri i napisal (otrivok programmi) :
StrPCopy(DataBuf, memText.Lines.Text);
dataLen := StrLen(DataBuf);
if not CPEncrypt(hProv, hKey, 0, True, 0, @DataBuf, @dataLen, 4096) then begin
errcode := GetLastError;
Memo1.Lines.Add(format(’Error in Encrypt %x, %s’,[errcode, SysErrorMessage(errcode)]));
exit;
end;
if not CPDecrypt(hProv, hKey, 0, True, 0, @DataBuf, @dataLen) then begin
errcode := GetLastError;
Memo1.Lines.Add(format(’Error in Decrypt %x, %s’,[errcode, SysErrorMessage(errcode)]));
exit;
end;
memText.Lines.Text := StrPas(DataBuf);
///
memText - TMemo
posle etogo pervie 8 simvolov iskojayutsya!
17.01.2003 16:18:00Василий
Совершенно верно.
Поскольку по умолчанию при шифровании используется алгоритм CBC, то НЕОБХОДИМО сохранить синхропосылку ключа перед его использованием при зашифровании и восстановить ее перед расшифрованием.

Это делается с использованием соответственно функций CryptGetKeyParam(...,KP_IV,...) и CryptSetKeyParam(...,KP_IV,...)

Пример использования приведен в проекте csptest (файд export.c)