gpt4 book ai didi

c++ - 打印数字签名信息

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:46 26 4
gpt4 key购买 nike

如标题中所述,我想将数字签名信息打印到控制台。这是我写的代码:

bool CheckDigSig(const std::wstring& filepath)
{
bool rval = false;

DWORD dwEncoding = 0;
DWORD dwContentType = 0;
DWORD dwFormatType = 0;
HCERTSTORE hStore = NULL;
HCRYPTMSG hMsg = NULL;

// Get message handle and store handle from the signed file.
BOOL fResult = CryptQueryObject(CERT_QUERY_OBJECT_FILE,
filepath.c_str(),
CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED,
CERT_QUERY_FORMAT_FLAG_BINARY,
0,
&dwEncoding,
&dwContentType,
&dwFormatType,
&hStore,
&hMsg,
NULL);
if (!fResult)
return false;

DWORD singer_info_size = 0;
// Get signer information size.
fResult = CryptMsgGetParam(hMsg, CMSG_SIGNER_INFO_PARAM, 0, NULL, &singer_info_size);
if (!fResult)
{
CryptMsgClose(hMsg);
CertCloseStore(hStore, 0);
return false;
}

// Allocate memory for signer information.
std::vector<byte> signer_info_data(singer_info_size);
PCMSG_SIGNER_INFO pSignerInfo = reinterpret_cast<PCMSG_SIGNER_INFO>(signer_info_data.data());

// Get Signer Information.
fResult = CryptMsgGetParam(hMsg, CMSG_SIGNER_INFO_PARAM, 0, (PVOID)pSignerInfo, &singer_info_size);
if (fResult)
{
//pSignerInfo->Issuer;
//pSignerInfo->SerialNumber;
}

CryptMsgClose(hMsg);
CertCloseStore(hStore, 0);
return rval;
}

我想在最后打印这两个变量(现在值得推荐):pSignerInfo->发行人;pSignerInfo->序列号;

我不知道如何使它成为可读格式,例如字符串、字节或字符数组。你能帮我吗?

最佳答案

本文http://support.microsoft.com/kb/323809有你需要的代码。这是它的一小段:

    // Get Issuer name.
if (!(CertGetNameString(pCertContext,
CERT_NAME_SIMPLE_DISPLAY_TYPE,
CERT_NAME_ISSUER_FLAG,
NULL,
szName,
dwData)))
// ...

显然,其中包含更多代码,涵盖了此任务的所有各个方面。包括打印 SerialNumber

关于c++ - 打印数字签名信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24480344/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com