我有一个生成的RSA密钥对存储为PRIVATEKEYBLOB和PUBLICKEYBLOB,我需要能够将这些密钥转换为DER或PEM格式,以便我可以在PHP或Python中使用它。我发现我可以使用CryptEncodeObject函数将我的PRIVATEKEYBLOB转换为DER。为了做到这一点,我需要使用PKCS_RSA_PRIVATE_KEY编码标志。但我找不到如何将PUBLICKEYBLOB转换为DER的任何线索。Microsoft CryptoAPI:如何将PUBLICKEYBLOB转换为DER/PEM?
这里是我的PRIVATEKEYBLOB皈依代码:
openssl rsa -pubin -inform MS\ PUBLICKEYBLOB -in pub.ms -outform DER -out pub.der
openssl rsa -inform MS\ PRIVATEKEYBLOB -in pri.ms -outform DER -out pri.der
新增::
LPCSTR type = PKCS_RSA_PRIVATE_KEY;
DWORD encd = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING;
DWORD dlen = 0;
if(!CryptEncodeObject(encd, type, key, null, &dlen))
{ LOG_ERROR(); return false; }
// Buffer allocation (der variable)
if(!CryptEncodeObject(encd, type, key, der, &dlen))
{ LOG_ERROR(); return false; }
我通过比较它们的OpenSSL工具的输出测试我的钥匙我试图RSA_CSP_PUBLICKEYBLOB与X509_ASN_ENCODING,但结果与openssl工具的输出不同,并且关键输入失败。 openssl的导出DER长25个字节,并且只有前3个字节在两个键中相等。这是比较关键的画面:
如果我们在这幅画仔细观察,我们可以看到,OpenSSL的密钥版本有3字节后某种额外的24个字节报头的。还没有弄清楚它到底是什么,但如果我使用RSA_CSP_PUBLICKEYBLOB从CryptEncodeObject获得的输出来对此硬编码头进行联合分析,它一切正常。不知道该标题是否总是相同或不是。
那么,我尝试了RSA_CSP_PUBLICKEYBLOB与X509_ASN_ENCODING,但结果是从根本上不同openssl工具的输出,并导入关键失败。 – user2102508
openssl导出的DER长25个字节,并且只有前3个字节在两个键中相等。 – user2102508
请参阅我添加到第一篇文章的图片。 – user2102508