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

17 Апр 2021 в 20:01
404 +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
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 95 117 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир