2013-04-17 23 views
0

讓我說我想要一個代碼在我的C++應用程序中做這樣的openssl命令。使用libopenssl轉儲公鑰從私人使用

openssl rsa -in private.pem -pubout -outform der -out ./out.pub 

我該怎麼做?

我正在尋找github上的示例,並提出了遵循方案。

key = PEM_read_bio_RSAPrivateKey(bio, NULL, 0, NULL); 
len = i2d_RSAPublicKey(key, &bufp); 

它返回的值與我從命令行工具獲得的值不同。我想沒有從私鑰到公共的轉換,它只是保存私鑰。任何人都可以告訴我使用openssl lib從私人獲取pub key的正確方法。我也非常感謝openssl的pub \ priv關鍵示例的任何鏈接。

+1

也許有一個程序的某處,你可以看看可以做這種轉換的源代碼... – PlasmaHH

回答

0

最後,我剛剛在openssl本身中找到合適的源代碼。這是在

OpenSSL的正是發生RSA -in private.pem -pubout -outform德退房手續./out.pub

我已經下降了很多檢查,從原來的代碼,使其小。

#include <openssl/pem.h> 
#include <openssl/x509.h> 

EVP_PKEY *load_key(const char *file) 
{ 
    BIO *key=NULL; 
    EVP_PKEY *pkey=NULL; 

    key=BIO_new(BIO_s_file()); 
    BIO_read_filename(key,file); 
    pkey=PEM_read_bio_PrivateKey(key,NULL,NULL,NULL); 

    return pkey; 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    BIO *out=NULL; 
    out=BIO_new(BIO_s_file()); 
    EVP_PKEY *pkey; 
    RSA *rsa=NULL; 

    char *infile = path_to_pem; 
    char *outfile = path_to_der; 

    pkey = load_key(infile); 

    if (pkey != NULL) 
     rsa = EVP_PKEY_get1_RSA(pkey); 
    EVP_PKEY_free(pkey); 

    BIO_write_filename(out,outfile); 

    i2d_RSA_PUBKEY_bio(out,rsa); 
} 
相關問題