首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >CryptBinaryToString未输出预期的公钥

CryptBinaryToString未输出预期的公钥
EN

Stack Overflow用户
提问于 2019-05-15 03:38:44
回答 1查看 551关注 0票数 1

我正在尝试使用Windows CryptoAPI函数输出导入的RSA公钥的原始base64格式。使用带有CRYPT_STRING_BASE64HEADER标志的CryptBinaryToString,输出标头显示为"BEGIN CERTIFICATE“,而不是预期的"BEGIN PUBLIC KEY”。

(编辑:我没有突出显示我的问题的这一部分)此外,生成的公钥似乎与原始公钥不同。

如果我导出输出并重新导入,这会出现问题吗?如果是这样,我做错了什么?

下面是如何导入公钥的。

公钥存储在文件pubkey.pem中,格式如下:

-----BEGIN PUBLIC KEY-----
[REDACTED]
-----END PUBLIC KEY-----

使用CreateFile/ReadFile将文件读入缓冲区。使用CryptStringToBinaryA将PEM转换为二进制。使用CryptDecodeObjectEx将二进制解码为X509_PUBLIC_KEY_INFO。PubKeyInfo结构被解码为RSA_CSP_PUBLICKEYBLOB (功能与上面相同)。

这部分工作得很好(可以导入密钥并使用CryptImportKey、CryptEncrypt等加密数据)。

下面是我尝试将原始blob恢复为base64 PEM格式的代码。我已经删除了大多数错误检查,以避免令人头疼的问题。

pbTmp和cbTmp是临时缓冲区,分别用于保存输出和大小。pBinaryKey是原始公钥blob (从前面导入) pBuffer是输出缓冲区(假设大小正确) ulDataLen是输出缓冲区大小

CryptEncodeObjectEx(X509_ASN_ENCODING, RSA_CSP_PUBLICKEYBLOB, pBinaryKey, 0, NULL, NULL, &cbTmp)
pbTmp = malloc(cbTmp);
CryptEncodeObjectEx(X509_ASN_ENCODING, RSA_CSP_PUBLICKEYBLOB, pBinaryKey, 0, NULL, pbTmp, &cbTmp)
CryptBinaryToStringA(pbTmp, cbTmp, CRYPT_STRING_BASE64HEADER, NULL, &ulDataLen)
CryptBinaryToStringA(pbTmp, cbTmp, CRYPT_STRING_BASE64HEADER, pBuffer, &ulDataLen)

产生的缓冲区以如下形式结束:

-----BEGIN CERTIFICATE-----
[REDACTED; DIFFERENT FROM ORIGINAL PUBLIC KEY]
-----END CERTIFICATE-----
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56137510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档