c++ - 如何从 PCCERT_CONTEXT 获取 CSP 的提供商名称?

标签 c++ cryptoapi

我一直在尝试从 PCCERT_CONTEXT 获取提供商名称,因为在我当前的项目中,我必须将智能卡中的所有证书加载到我的程序中。将来我必须通过更新证书、删除证书等任务来处理这些证书。但我有问题,我必须将 CSP 名称和提供商名称与 CryptAcquireContext 映射到执行。我目前对如何存档感到困惑,任何人都可以提供一些指南来帮助我解决这个问题。 我已经尝试使用 dwPropId 的 CertGetCertificateContextProperty 是 CERT_KEY_PROV_INFO_PROP_ID 但我无法获得 CRYPT_KEY_PROV_INFO。

最佳答案

如果我没听错的话,下面的代码片段展示了如何从证书中提取 key 提供者信息。

void trace(char* message, DWORD errorCode)
{
    cout << message << errorCode;
}

std::wstring Test_CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext)
{
    DWORD dwSize = 0;    
    BOOL bIsSuccess = CertGetCertificateContextProperty(pCertContext, 
                                                        CERT_KEY_PROV_INFO_PROP_ID,
                                                        NULL,
                                                        &dwSize);
    if (!bIsSuccess)
    {
        trace("CertGetCertificateContextProperty failed with error: ", GetLastError());
        return L"";
    }

    PCRYPT_KEY_PROV_INFO pKeyProvInfo = (PCRYPT_KEY_PROV_INFO)LocalAlloc(LMEM_ZEROINIT, dwSize);
    if (pKeyProvInfo == NULL)
    {
        trace("LocalAlloc failed with error:", GetLastError());
        return L"";
    }

    bIsSuccess = CertGetCertificateContextProperty(pCertContext, 
                                                   CERT_KEY_PROV_INFO_PROP_ID,
                                                   pKeyProvInfo,
                                                   &dwSize);

    std::wstring provName;
    if (bIsSuccess)
    {
        provName = pKeyProvInfo->pwszProvName;
    }

    LocalFree(pKeyProvInfo);

    return provName;
}

关于c++ - 如何从 PCCERT_CONTEXT 获取 CSP 的提供商名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7775806/

相关文章:

CryptDecrypt 失败并显示 NT_BAD_DATA (0x80090005)

openssl - CryptoAPI:使用 CryptVerifySignature 使用公钥验证来自 openssl 的签名

c++ - 如何使用包含非拉丁字符的 C++ 程序?

c++ - QSqlQuery 插入完整结构而不是单个字段?

c++ - 将 QString 十六进制转换为 ASCII 值

delphi - CryptoAPI 返回 HMAC_SHA1 的错误结果

c# - 传递结构似乎会损坏数据

c++ - CryptoAPI RSA : CryptDecrypt decrypts only at the first time, 其他调用返回 NTE_BAD_DATA

C++检测是否声明了全局变量

C++,利用内存泄漏优势?