| ||||
| ||||
Хочу зашифровать некоторые данные по алгоритму Диффи-Хелмана, делаю так: 1. Получаю контекст криптопровайдера CryptAcquireContext(&hProv, KEY_CONT_NAME, PROV_NAME, PROV_TYPE, 0) 2. Получаю дискриптор сертификата. 3. Импортирую публичный ключ CryptImportPublicKeyInfoEx(hProv, certContext.dwCertEncodingType, &certContext.pCertInfo->SubjectPublicKeyInfo, CALG_GR3410, 0, NULL, &hPublicKey) 4. Экспортирую открытый ключ в блоб CryptExportKey(hPublicKey, 0, PUBLICKEYBLOB, 0, pbKeyBlob, &dwBlobLen) 5. Получаю ключевую пару отправителя CryptGetUserKey(hProv, AT_KEYEXCHANGE, &hPrivateKey) 6. Пытаюсь импортировать ключ согласования CryptImportKey(hProv, pbKeyBlob, dwBlobLen, hPrivateKey, 0, &hAgreeKey) И вот эта функция возвращает Bad data. Причем cpcspi пишет: CPImportKey!ImportKey fail ret obj!0x80090005(-2146893819) В чем может быть дело, никак не пойму? | ||||
Ответы: | ||||
| ||||
Алгоритмы открытого и секретного ключа одинаковые? CryptExportKey нормально проходит? | ||||
| ||||
Экспорт открытого ключа происходит без ошибок. Используя Test Center CRYPTO-PRO, создал два контейнера Sender и Recipient, с новым набором ключей (оба). Криптопровайдер и размер ключа одиниковый по умолчанию. Установил галку "Пометить ключ как экспортируемый". Тип сертификата "проверки подлинности клиента". После этого проинсталировал сертификаты. Использую для секретного ключа контейнер Sender, а публичный ключ беру из сертификата получателя. Подозреваю, что алгоритмы одинаковые (полезные ссылки приветствуются). | ||||