我想将BIO保存(传递/复制)到char数组中。
当我知道大小时,它可以工作,但否则就不行。
例如,我可以使用以下命令将char *的内容存储到BIO中
const unsigned char* data = ...
myBio = BIO_new_mem_buf((void*)data, strlen(data));
但是,当我尝试使用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;
你们有什么建议吗?
最佳答案
我建议尝试使用SIZE-1,这样可以确保它以NULL终止。否则,它可能刚好超出了缓冲区的运行范围。
out = BIO_new_mem_buf((void*)temp, SIZE-1);
让我知道是否有帮助。
编辑:
当使用
BIO_new_mem_buf()
时,它是一个只读缓冲区,因此您无法对其进行写入。如果要写入内存,请使用:BIO *bio = BIO_new(BIO_s_mem());