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

17 Апр 2021 в 20:01
397 +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 Апр в 18:58
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 90 620 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир