如何从c ++中的证书文件导出Thumbprint

时间:2016-06-01 07:56:04

标签: c++ mfc

我有一个问题,我想编写一个简单的应用程序,它导出一些数据,如指纹(就像点击Windows中的* .cer文件一样,然后你就可以看到证书文件的序列号或者它了#s; s指纹,....)。我想在c ++ \ mfc中完成这项工作,如果有人轻轻地给我建议,就像有任何类或库来处理和检索来自* .cer文件的数据,我将感激不尽吗?

1 个答案:

答案 0 :(得分:1)

如果您正在寻找仅限Windows的解决方案,我会使用Win32 API。请查看CryptQueryObjectCryptMsgGetParam

有一个示例如何从windows documentation中的证书中获取信息:

WCHAR szFileName[] = L"certificate.cer"; 
DWORD dwEncoding, dwContentType, dwFormatType;
DWORD dwSignerInfo;
HCERTSTORE hStore = NULL;
HCRYPTMSG hMsg = NULL;

fResult = CryptQueryObject(CERT_QUERY_OBJECT_FILE,
                           szFileName,
                           CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED,
                           CERT_QUERY_FORMAT_FLAG_BINARY,
                           0,
                           &dwEncoding,
                           &dwContentType,
                           &dwFormatType,
                           &hStore,
                           &hMsg,
                           NULL);


// Get signer information size.
fResult = CryptMsgGetParam(hMsg, 
                           CMSG_SIGNER_INFO_PARAM, 
                           0, 
                           NULL, 
                           &dwSignerInfo);

// Allocate memory for signer information.
pSignerInfo = (PCMSG_SIGNER_INFO)LocalAlloc(LPTR, dwSignerInfo);

// Get Signer Information.
fResult = CryptMsgGetParam(hMsg, 
                           CMSG_SIGNER_INFO_PARAM, 
                           0, 
                           (PVOID)pSignerInfo, 
                           &dwSignerInfo);

// use pSignerInfo->SerialNumber

当然你应该处理错误,这个例子在上面的链接中更详细,但它是一个开始。如果你想要更详细的答案,你必须更具体地了解你所追求的是什么。