2015-04-16 38 views
3

我最近完成了一個將公鑰存入內存的程序,然後用它們創建了一條加密的消息。但是,我一直在創建只下載密鑰的列表時遇到一些困難。首次下載時,它們存儲在gpgme_data_t中。我無法找到將其直接轉換爲gpgme_key_t的功能。因此,我只是將它們導入到新的環境中。但是,當我爲了構建gpgme_op_encrypt的列表而再次導出密鑰時,我最終得到了本地密鑰環中的其他密鑰。我試過設置disable-gpgconf,但這並沒有改變任何東西。我也嘗試將GNUPGHOME設置爲tmp目錄,但是當我調用encrypt時導致了分段錯誤。有沒有辦法不導入用戶的鑰匙圈或將gpgme_data_tchar*轉換爲gpgme_key_tC GPGMe忽略用戶密鑰環

回答

2

有沒有辦法不導入用戶的鑰匙圈

爲了防止加載用戶的鑰匙圈,你將需要設置的背景搬到別的地方去的GnuPG的主目錄。

下面是沒有任何錯誤校驗的例子

#include <gpgme.h> 
#include <locale.h> 

int main() { 
    gpgme_ctx_t ctx; // the context 
    gpgme_error_t err; // errors 
    gpgme_key_t key; // the key 
    gpgme_keylist_result_t result; // the keylist results 

    setlocale (LC_ALL, ""); // set the locale 
    gpgme_set_locale (NULL, LC_CTYPE, setlocale (LC_CTYPE, NULL)); // set gpgme locale 
    gpgme_check_version(NULL); // initialize gpgme 

    gpgme_new (&ctx); // initialize the context 

    gpgme_ctx_set_engine_info (ctx, GPGME_PROTOCOL_OpenPGP, NULL, "/tmp/xyz"); // set the context GNUPGHOME to "/tmp/xyz" 

    gpgme_op_keylist_start (ctx, NULL, 0); // start the keylist 

    while (!(err = gpgme_op_keylist_next (ctx, &key))) { // loop through the keys in the keyring 
     fprintf(stdout, "Key ID: %s\n", key->subkeys->keyid); // print out the keyid 
     gpgme_key_unref (key); // release the key reference 
    } 

    gpgme_release(ctx); // release the context, all done 

    return 0; 
} 
+0

'gpgme_ctx_set_engine_info(CTX,GPGME_PROTOCOL_OpenPGP,NULL, 「/ TMP/XYZ」);'實際打破它並且沒有線路它像正常 – 735Tesla

+0

@ 735Tesla - 究竟是什麼突破? – kylehuff

+0

它不會產生任何輸出。我得到的錯誤說它沒有被初始化。 – 735Tesla