我有一个问题,我想编写一个简单的应用程序,它导出一些数据,如指纹(就像点击Windows中的* .cer文件一样,然后你就可以看到证书文件的序列号或者它了#s; s指纹,....)。我想在c ++ \ mfc中完成这项工作,如果有人轻轻地给我建议,就像有任何类或库来处理和检索来自* .cer文件的数据,我将感激不尽吗?
答案 0 :(得分:1)
如果您正在寻找仅限Windows的解决方案,我会使用Win32 API。请查看CryptQueryObject和CryptMsgGetParam。
有一个示例如何从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
当然你应该处理错误,这个例子在上面的链接中更详细,但它是一个开始。如果你想要更详细的答案,你必须更具体地了解你所追求的是什么。