我想将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());

10-04 21:05