| ||||
| ||||
При обращении к CryptoPro для шифрации/расшифрации текста (CPEncode, CPDecode)Неверно распаковываются первые 8 байт (вроде что-то типа синхропосылки в ГОСТ).баг или фича ? | ||||
Ответы: | ||||
| ||||
CPEncode/CPDecode ? CPEncrypt может. | ||||
| ||||
Абсолютно верно. Я неправильно указал название функции(вбивал по памяти). Так с чем это может быть связано? | ||||
| ||||
На первой страничке напишите в поиске cpencrypt. Там есть примеры. | ||||
| ||||
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! | ||||
| ||||
Совершенно верно. Поскольку по умолчанию при шифровании используется алгоритм CBC, то НЕОБХОДИМО сохранить синхропосылку ключа перед его использованием при зашифровании и восстановить ее перед расшифрованием. Это делается с использованием соответственно функций CryptGetKeyParam(...,KP_IV,...) и CryptSetKeyParam(...,KP_IV,...) Пример использования приведен в проекте csptest (файд export.c) | ||||