我需要找到证书详细信息中指定的公钥。我使用了WinHttpQuery选项并提供了WINHTTP_OPTION_SERVER_CERT_CONTEXT作为选项标记。
bRet = WinHttpQueryOption(
hRequest,
WINHTTP_OPTION_SERVER_CERT_CONTEXT,
&pCert,
&dwLen
);
我使用从WinhttpQueryOption返回的结构找到了公钥加密类型。现在我需要找到公钥的大小
示例:RSA(2048位)
有没有办法使用这种方法查找公钥的大小,还是有其他方法吗?
答案 0 :(得分:0)
经过几个小时的搜索,我终于找到了解决方案。
使用WinHttpQueryOption,使用WINHTTP_OPTION_SERVER_CERT_CONTEXT作为选项标志并获取结构pCert(CERT_CONTEXT)。现在获取结构的PCERT_INFO成员以获取有关证书的详细信息。在PCERT_INFO中使用 SubjectPublicKeyInfo 成员,使用函数 CertGetPublicKeyLength()并将SubjectPublicKeyInfo成员作为参数传递给它。该函数返回公钥的长度。
代码:
bRet = WinHttpQueryOption(
hRequest,
WINHTTP_OPTION_SERVER_CERT_CONTEXT,
&pCert,
&dwLen
);
cout<<"Alg Name : "<<pCert->pCertInfo-
>SubjectPublicKeyInfo.Algorithm.pszObjId<<endl;
CRYPT_BIT_BLOB pubKey = pCert->pCertInfo->SubjectPublicKeyInfo.PublicKey;
DWORD pLength = CertGetPublicKeyLength(X509_ASN_ENCODING |
PKCS_7_ASN_ENCODING,&pCert->pCertInfo->SubjectPublicKeyInfo);
cout<<"Length of public key : "<<pLength<<endl;