【问题标题】:Get the size of public key using WinHttpQueryOption使用 WinHttpQueryOption 获取公钥的大小
【发布时间】:2018-01-08 07:17:38
【问题描述】:

我需要找到证书详细信息中指定的公钥。我使用了 WinHttpQuery 选项并提供了 WINHTTP_OPTION_SERVER_CERT_CONTEXT 作为选项标志。

bRet = WinHttpQueryOption(
hRequest,
WINHTTP_OPTION_SERVER_CERT_CONTEXT,
&pCert,
&dwLen

);

我使用从 WinhttpQueryOption 返回的结构找到了公钥加密类型。现在我需要找到公钥的大小

示例:RSA(2048 位)

有没有办法使用这种方法找到公钥的大小,或者还有其他方法吗?

Sample of certificate details

【问题讨论】:

  • 我认为,pCert 变量包含一个指向 CERT_CONTEXT 结构的指针。你可以通过这个对象(有一个 pCertInfo 字段,其中包含一个指向 CERT_INFO 结构的指针)。使用它缩小到SubjectPublicKeyInfo
  • 是的,我就是这样做的,这就是我找到加密算法的方式。我可以获得算法名称和公钥(以编码形式)。现在我如何获得密钥的大小?注意:公钥是 CRYPT_BIT_BLOB 类型
  • 公钥的大小明确规定为 256 位。不要在此处发布文字图片,尤其是不要发布文字图片的链接。不清楚你在问什么。
  • 嗯,我发布它是为了从证书详细信息中清楚我想要什么。这就是为什么我提到它作为证书详细信息示例

标签: c++ ssl-certificate visual-c++-2010 winhttp


【解决方案1】:

经过几个小时的搜索,我终于想出了解决方案。

使用 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 2013-02-06
    • 2017-09-20
    • 1970-01-01
    • 2012-12-12
    相关资源
    最近更新 更多