2013-01-24 173 views
2

我想從CString讀取RSA公鑰。之前我從一個文件做它很簡單,我正在使用:OpenSSL,從CString讀取公共RSA密鑰

RSA *PEM_read_RSA_PUBKEY(FILE *fp, RSA **x, pem_password_cb *cb, void *u); 

但現在我不能使用此方法。這就是爲什麼我想過使用:

RSA *PEM_read_bio_RSA_PUBKEY(BIO *bp, RSA **x, pem_password_cb *cb, void *u); 

但我不明白的BIO *bp參數以及如何一個CString傳遞給它!

回答

1

bio(3)文檔

甲BIO是一個I/O抽象,它掩蓋了許多的從一個應用程序的基本I/O的信息。如果應用程序爲其I/O使用BIO,則它可以透明地處理SSL連接,未加密的網絡連接和文件I/O。

而對於你的情況,我猜BIO_s_mem(3)類型正確

內存BIO是使用內存作爲它的I/O的源/宿BIO。

BIO * BIO_new_mem_buf(無效* buf中,INT LEN);
...
BIO_new_mem_buf()在buf處使用len個字節的數據創建內存BIO,如果len爲-1,則buf被假定爲空終止,並且其長度由strlen確定。 BIO被設置爲只讀狀態,因此無法寫入。

與C字符串

所以,我會說這將導致

char rsa_key[1024]; 
... 
BIO *bp = BIO_new_mem_buf(rsa_key, -1); 
RSA *rsa = PEM_read_bio_RSA_PUBKEY(bp, ...); 
+0

感謝ü非常多,我有一些麻煩,真正理解生物是如何工作的! – darkheir

+0

@darkheir聲明:這僅僅來自文檔。我沒有嘗試過,我自己;-) –

+0

我試過了,它的工作原理,謝謝! – darkheir