Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.04.2013(UTC) Сообщений: 43 Откуда: Москва Сказал(а) «Спасибо»: 11 раз
|
1) Ответ понятен. 2) Проверил функционально принудительное задание UKM на Ваших примерах зашифрования и расшифрования файлов, приведенных в документе "СКЗИ КриптоПро CSP. Руководство программиста Часть 1". В данные примеры добавил функционал принудительного задания UKM (в остальной части примеры не изменялись). См. фрагменты кода: а) Зашифрование файла (фрагмент кода установки UKM в ключ согласования): Код:
// Получение ключа согласования импортом открытого ключа получателя
// на закрытом ключе отправителя.
if(CryptImportKey(
hProv,
pbKeyBlob,
dwBlobLen,
hKey,
0,
&hAgreeKey))
{
printf("The responder public key has been imported. \n");
}
else
{
HandleError("Error during CryptImportKey public key.");
}
//*******************Set_UKM********************
byte pbIV2[8] = {0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
if(CryptSetKeyParam(hAgreeKey, KP_IV, pbIV2, 0))
{
printf("The UKM has been set. \n");
}
else
{
HandleError("Error UKM.");
}
//*******************End Set_UKM***************
// Установление PRO_EXPORT алгоритма ключа согласования
if(CryptSetKeyParam(
hAgreeKey,
KP_ALGID,
(LPBYTE)&ke_alg,
0))
{
printf("PRO_EXPORT agree key algorithm has been set. \n");
}
else
{
HandleError("Error during CryptSetKeyParam agree key.");
}
б) Расшифрование файла (фрагмент кода установки UKM в ключ согласования): Код:
// Получение ключа согласования импортом открытого ключа отправителя
// на закрытом ключе получателя.
if(CryptImportKey(
hProv,
pbKeyBlob,
dwBlobLen,
hKey,
0,
&hAgreeKey))
{
printf("The sender public key has been imported. \n");
}
else
{
HandleError("Error during CryptImportKey public key.");
}
//*******************Set_UKM********************
byte pbIV2[8] = {0x00, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA, 0xFA};
if(CryptSetKeyParam(hAgreeKey, KP_IV, pbIV2, 0))
{
printf("The UKM has been set. \n");
}
else
{
HandleError("Error UKM.");
}
//*******************End Set_UKM***************
// Установление PRO_EXPORT алгоритма ключа согласования
if(CryptSetKeyParam(
hAgreeKey,
KP_ALGID,
(LPBYTE)&ke_alg,
0))
{
printf("PRO_EXPORT agree key algorithm has been set. \n");
}
else
{
HandleError("Error during CryptSetKeyParam agree key.");
}
По результатам проверки установлено, что если при расшифровании задать значение UKM отличное от того, которое использовалось при зашифровании, либо его не задавать совсем, то файл расшифровывается корректно. Почему так происходит?
|