Доброго времени суток.
Использую функции CryptoApi. Имею экспортированный в формате X509 сертификат.
Импортирую сертификат в CryptoPro CSP. Достаю оттуда публичный ключ в byte*. Получаю, что длина массива 66.
Достаю публичный ключ из контейнера CryptoPro CSP с помощью функции GetUserKey, получаю длину массива 100.
Почему?
Дело в том, что я подписываю данные. Мне необходимо при верификации данных доставать публичный ключ из сертификата пользователя, а не держать отдельно еще и файл с публичным ключом. Пытаюсь так делать, но CryptVerifySignature возвращает false, а если импортирую публичный ключ из файла, то true. Почему?
Вот пример кода:
1. При экспорте/импорте публичного ключа
CryptGetUserKey(hProv, AT_SIGNATURE, phPubKey);
CryptExportKey(hPubKey, NULL, PUBLICKEYBLOB, 0, publicKeyBlob, dwBlobLen);
CryptImportKey(phProv, publicKeyBlob, publicKeyBlobLength, NULL, 0, phPublicKeyImported)
//Получаю ключ длиной 100 байт
2. При импорте сертификата:
CERT_CONTEXT context = CertCreateCertificateContext(X509_ASN_ENCODING, certEncoded, certEncodedLength);
CryptImportPublicKeyInfoEx(hProv, X509_ASN_ENCODING, context->pCertInfo->SubjectPublicKeyInfo, 0, 0, NULL, phKey);
//Получаю ключ длиной 66 байт.
Заранее благодарю.