1
我想將一個BIO保存(管道/複製)到一個char數組中。 當我知道它的大小,但不是。將BIO保存爲char *(來自SMIME_write_CMS)
例如,我可以在我的char *的內容使用該
const unsigned char* data = ...
myBio = BIO_new_mem_buf((void*)data, strlen(data));
存儲到BIO但是,當我嘗試使用SMIME_write_CMS這需要一個BIO(我所之前創建)的輸出它不起作用。
const int SIZE = 50000;
unsigned char *temp = malloc(SIZE);
memset(temp, 0, SIZE);
out = BIO_new_mem_buf((void*)temp, SIZE);
if (!out) {
NSLog(@"Couldn't create new file!");
assert(false);
}
int finished = SMIME_write_CMS(out, cms, in, flags);
if (!finished) {
NSLog(@"SMIME write CMS didn't succeed!");
assert(false);
}
printf("cms encrypted: %s\n", temp);
NSLog(@"All succeeded!");
OpenSSL參考使用直接文件輸出與BIO。 這工作,但我不能在Objective-C使用BIO_new_file()...: -/
out = BIO_new_file("smencr.txt", "w");
if (!out)
goto err;
/* Write out S/MIME message */
if (!SMIME_write_CMS(out, cms, in, flags))
goto err;
難道你們有什麼建議嗎?
謝謝,這是另一個問題,但它並沒有解決我前面提到的問題。 : -/ 現在我已經使用了BIO_new(BIO_s_mem())而不是BIO_new_mem_buf()。味精存儲在那裏,但我需要它在一個字符*(讓說字符串)。所以我試着將BIO_read()寫成一個字符串:「unsigned char * temp = malloc(50000); memset(temp,0,50000); int size = BIO_read(out,temp,50000);」。 這工程順便說一句。我可以將它打印在屏幕上或將它保存在一個文件中,但由於字符串的靜態大小,它真的很難看。在閱讀之前,你知道如何確定BIO的大小嗎? (讀取返回大小...) – Chris 2012-02-08 09:03:36
'long BIO_get_mem_data(BIO * b,char ** pp)'將pp設置爲指向存儲器BIO數據開始的指針並返回可用數據總量。它是作爲一個宏實現的。這應該有所幫助。 – 2012-02-08 23:31:43