13.03.2007 10:42:33Проблемы с вектором инициализации Ответов: 4
Волков
Проблема с расшифрованием файла, не расшифровываются некоторые участки по 8 байт. Предполагаю что проблема в IV. Получаю его следующим образом:
if (!CryptGenKey(
hProv,
CALG_G28147,
CRYPT_EXPORTABLE,
&hSessionKey))
if (!CryptGetKeyParam(
hSessionKey,
KP_IV,
NULL,
&dwIV,
0))
{
HandleError("Error computing IV length.");
}
pbIV = (BYTE*)malloc(dwIV);
if (!CryptGetKeyParam(
hSessionKey,
KP_IV,
pbIV,
&dwIV,
0))

далее шифрую файл на сессионном ключе.

Расшифровываю так:
получаю сессионный ключ
указываю вектор инициализации
if (CryptSetKeyParam(
hSessionKey,
KP_IV,
pbIV,
0))

и расшифровываю файл. В чем может быть проблема?
 
Ответы:
13.03.2007 18:21:11Василий
IV меняестся после каждого вызова CryptEncrypt (CryptDecrypt), в случае если указан флажок Final=TRUE. Поэтому, если вызовов несколько - нужно запоминать несколько значений IV и устанавливать их.
14.03.2007 6:54:28Волков
Благодарю за ответ. Еще такой вопрос есть ли ограничения на размер блока передаваемого для зашифрования расшифрования функциям CryotEncrypt/CryptDecrypt?
14.03.2007 17:56:05Василий
Если значение параметра сессионного ключа "KP_MIXMODE" - по умолчанию, то размер блока ограничен только свободной памятью.
15.03.2007 6:30:32Волков
А на скорость шифрования размер блока влияет?