我有一個生成的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