Как вынуть публичный ключ из сертификата, для дальнейшей подписи и шифрования данных через библиотеку CryptoAPI? Здравствуйте, пытаюсь через библиотеку CryptoAPI используя C++, реализовать функционал подпись данных, используя USB токен. В документации MSDN написано что подпись можно реализовать через функцию CryptSignHash где 1 аргументом, нужно получить HCRYPTHASH, который в свою очередь получается через функцию CryptCreateHash, в аргументах которого нужно передать HCRYPTKEY, который как я понимаю должен содержать в себе публичный ключ сертификата, но я не могу понять, как получить публичный ключ сертификата, могу получить сам сертификат (он установлен в пользовательские сертификаты), но что с ним делать дальше не понимаю... может кто то напишет пример как вынуть этот публичный ключ для сертификата... буду очень благодарен...

17 Апр 2021 в 20:01
423 +1
0
Ответы
1

Для того чтобы извлечь публичный ключ из сертификата, вам нужно сначала получить сам сертификат, а затем извлечь из него открытый ключ.

Примерный код для получения публичного ключа из сертификата может выглядеть следующим образом:

#include <windows.h>
#include <wincrypt.h>
HCERTSTORE hCertStore = CertOpenSystemStore(NULL, L"MY");
if (!hCertStore) {
// Обработка ошибки открытия хранилища сертификатов
}
PCCERT_CONTEXT pCertContext = CertFindCertificateInStore(hCertStore, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_SUBJECT_STR, L"SubjectName", NULL);
if (!pCertContext) {
// Обработка ошибки поиска сертификата
}
CRYPT_BIT_BLOB publicKeyBlob;
if (!CryptDecodeObjectEx(X509_ASN_ENCODING, X509_PUBLIC_KEY_INFO, pCertContext->pCertInfo->SubjectPublicKeyInfo.PublicKey.pbData, pCertContext->pCertInfo->SubjectPublicKeyInfo.PublicKey.cbData, 0, NULL, &publicKeyBlob, NULL)) {
// Обработка ошибки декодирования открытого ключа
}
// publicKeyBlob содержит открытый ключ сертификата
// Освобождение ресурсов
CertFreeCertificateContext(pCertContext);
CertCloseStore(hCertStore, 0);

После выполнения этого кода в переменной publicKeyBlob будет содержаться открытый ключ сертификата в виде блоба.

Теперь вы можете использовать этот открытый ключ для подписи данных с помощью библиотеки CryptoAPI.

17 Апр 2024 в 18:58
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир