2013-04-17 6 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 키를 가져 오는 올바른 접근법을 말해 줄 수 있습니까? openssl의 pub \ priv key 예제에 대한 링크도 크게 감사 할 것입니다.

+1

어쩌면이 변환을 수행 할 수있는 소스 코드를 볼 수있는 프로그램이있을 것입니다 ... – PlasmaHH

답변

0

마지막으로 나는 openssl 자체 내에 적절한 소스를 찾았습니다. 여기

하려면 openssl 동안 그것을 만들기 위해 원래의 코드에서 내가 하락했습니다 검사를 많이

을 ./out.pub -out RSA -in private.pem -pubout -outform 데르 일이 정확히 무엇인가 더 작다.

#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); 
}