| ||||
| ||||
Проблема с расшифрованием файла, не расшифровываются некоторые участки по 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)) и расшифровываю файл. В чем может быть проблема? | ||||
Ответы: | ||||
| ||||
IV меняестся после каждого вызова CryptEncrypt (CryptDecrypt), в случае если указан флажок Final=TRUE. Поэтому, если вызовов несколько - нужно запоминать несколько значений IV и устанавливать их. | ||||
| ||||
Благодарю за ответ. Еще такой вопрос есть ли ограничения на размер блока передаваемого для зашифрования расшифрования функциям CryotEncrypt/CryptDecrypt? | ||||
| ||||
Если значение параметра сессионного ключа "KP_MIXMODE" - по умолчанию, то размер блока ограничен только свободной памятью. | ||||
| ||||
А на скорость шифрования размер блока влияет? | ||||