2013-09-23 42 views
0

我正在嘗試生成RSA私鑰並以編程方式爲其設置密碼。生成私有RSA私鑰並以編程方式設置密碼短語

使用下面的代碼我可以生成無密碼的加密密鑰沒有問題:

if (!PEM_write_PrivateKey(priv_f, key_p, NULL, NULL, 0, 0, NULL)) { 
    fprintf(stderr, "Write private key failed\n"); 
    return -1; 
} 

但是使用這個代碼,我不斷收到寫私鑰失敗的錯誤:

if (!PEM_write_PrivateKey(priv_f, key_p, EVP_des_ede3_cbc(), NULL, 0, 0, passphrase)) { 
    fprintf(stderr, "Write private key failed\n"); 
    return -1; 
} 

我我試圖按照手冊頁here上的代碼。有什麼方法可以從錯誤中獲得更多信息嗎? Errno總是0.謝謝!

回答

2

通過添加以下代碼並對PEM_write_PrivateKey參數進行了輕微更改,我得到了它的工作。

void init_openssl(void) 
{ 
    if (SSL_library_init()) { 
     SSL_load_error_strings(); 
     OpenSSL_add_all_algorithms(); 
     ERR_load_crypto_strings(); 
     RAND_load_file(_RAND_FILENAME, _RAND_LOADSIZE); 
    } else { 
     exit(EXIT_FAILURE); 
    } 
} 

而且

if (!PEM_write_PrivateKey(priv_f, key_p,EVP_aes_256_cbc(), 
          (unsigned char*)passphrase,(int)strlen(passphrase), NULL, NULL)) { 
    fprintf(stderr, "Write private key failed\n"); 
    handle_openssl_error(); 
    return -1; 
} 
+0

根據OpenSSL的文檔,'SSL_library_init'總是返回'1'(https://www.openssl.org/docs/ssl/SSL_library_init.html),所以你的'其他「永遠不會發生。 –