OpenSSL - 通过内存

时间:2018-03-14 11:18:40

标签: c openssl

我尝试使用BUF_MEM访问BIO的字节。 但如果它是文件BIO,则无法正常工作。

    BUF_MEM *bmmem = NULL, bmfil = NULL;
    int ret = -1;

    // OK for memory
    BIO *biomem = BIO_new (BIO_s_mem ());       
    ret = BIO_get_mem_ptr (biomem, &bmmem);    // ret = 1
    printf ("\nbiomem - %d %d", ret, bmmem);   // OK

    // NOK for file
    BIO *biofil = BIO_new (BIO_s_file ());
    BIO_read_filename (biofil, "myfile.pem");   // ok
    ret = BIO_get_mem_ptr (biofil, &bmfil);     // ret = 0
    printf ("\nbiofil - %d %d, ret, bmfil);     // NOK

我错过了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

BIO_get_mem_ptr为您提供指向mem bio的底层内存缓冲区的指针。它只适用于mem BIO。在文件BIO中没有底层内存缓冲区!

使用BIO_read从BIO中读取数据。这适用于mem BIO和文件BIO。

https://www.openssl.org/docs/man1.1.0/crypto/BIO_read.html