• openssl C++研发之pem格式处理详解


    一、PEM_writeXXX和EM_write_bio_XXX

    在OpenSSL的crypto/pem.h头文件中,PEM_write_XXXXPEM_write_bio_XXXX系列函数用于将特定类型的数据写入文件或BIO(内存缓冲区)中,其中XXXX代表不同的数据类型。

    这些函数的使用方式相似,通常接受一个文件指针(FILE*)或BIO指针(BIO*)作为参数,并将相应类型的数据写入到文件或BIO中。请根据需要选择合适的函数,并在使用时确保正确处理错误情况。

    1.1 PEM_write_X509 / PEM_write_bio_X509

    • 用于将X.509证书(X509结构体)写入文件或BIO中。

    1.2 PEM_write_PrivateKey / PEM_write_bio_PrivateKey

    • 用于将私钥(EVP_PKEY结构体)写入文件或BIO中。

    1.3 PEM_write_PUBKEY / PEM_write_bio_PUBKEY

    • 用于将公钥(EVP_PKEY结构体,通常是RSA、DSA、EC等密钥的公钥部分)写入文件或BIO中。

    1.4. PEM_write_PKCS8PrivateKey / PEM_write_bio_PKCS8PrivateKey

    • 用于将PKCS#8格式的私钥(EVP_PKEY结构体)写入文件或BIO中。

    1.5. PEM_write_RSAPrivateKey / PEM_write_bio_RSAPrivateKey

    • 用于将RSA私钥写入文件或BIO中。

    1.6. PEM_write_RSAPublicKey / PEM_write_bio_RSAPublicKey

    • 用于将RSA公钥写入文件或BIO中。

    1.7. PEM_write_DSA / PEM_write_bio_DSA

    • 用于将DSA密钥对(DSA结构体)写入文件或BIO中。

    1.8. PEM_write_ECPrivateKey / PEM_write_bio_ECPrivateKey

    • 用于将EC(椭圆曲线)私钥写入文件或BIO中。

    1.9. PEM_write_EC_PUBKEY / PEM_write_bio_EC_PUBKEY

    • 用于将EC公钥写入文件或BIO中。

    二、PEM_writeXXX和EM_write_bio_XXX

    PEM_readXXXPEM_read_bio_XXX 是 OpenSSL 库中用于读取 PEM 格式数据的一组接口。这些接口被用于读取不同类型的 PEM 数据,例如证书、私钥等。下面简要说明这两组接口的作用:

    2.1. PEM_readXXX

    这组接口用于从文件或内存中读取 PEM 格式数据,其中 XXX 表示不同的数据类型,例如:

    • PEM_read_RSAPrivateKey:用于读取 RSA 私钥。
    • PEM_read_RSAPublicKey:用于读取 RSA 公钥。
    • PEM_read_X509:用于读取 X.509 证书。
    • 等等…

    这些接口通常接受一个文件指针作为参数,用于从文件中读取 PEM 数据。

    2.2. PEM_read_bio_XXX

    这组接口也用于从文件或内存中读取 PEM 格式数据,但与 PEM_readXXX 不同的是,PEM_read_bio_XXX 接受一个 BIO 结构体作为参数,用于提供更灵活的输入源支持。BIO 是 OpenSSL 中用于提供 I/O 抽象的结构体,它可以表示文件、内存等不同的数据源。

    例如:

    • PEM_read_bio_RSAPrivateKey:用于从 BIO 中读取 RSA 私钥。
    • PEM_read_bio_RSAPublicKey:用于从 BIO 中读取 RSA 公钥。
    • PEM_read_bio_X509:用于从 BIO 中读取 X.509 证书。
    • 等等…

    2.3. 使用示例

    // 使用 PEM_read_RSAPrivateKey 从文件中读取 RSA 私钥
    FILE *privateKeyFile = fopen("private_key.pem", "r");
    RSA *rsaPrivateKey = PEM_read_RSAPrivateKey(privateKeyFile, NULL, NULL, NULL);
    fclose(privateKeyFile);
    
    // 使用 PEM_read_bio_RSAPublicKey 从内存中读取 RSA 公钥
    BIO *bio = BIO_new_mem_buf(publicKeyData, publicKeyDataLength);
    RSA *rsaPublicKey = PEM_read_bio_RSAPublicKey(bio, NULL, NULL, NULL);
    BIO_free(bio);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    这里的例子演示了如何使用 PEM_read_RSAPrivateKeyPEM_read_bio_RSAPublicKey 从文件和内存中读取 RSA 密钥对。其他接口的使用方式类似,只需选择适当的接口和数据源类型。

  • 相关阅读:
    Codeforces Round #787 (Div. 3) D. Vertical Paths
    SpringBoot:MVC自动配置原理
    不知道什么的复习题
    Mysql优化-经验分享
    GoLand2022.2.5版本Hello调动Greetings包
    app逆向(10)| APP的加固与脱壳
    java中的锁
    muduo库的高性能日志库(四)——LogFile文件
    Vatee万腾的数字化掌舵:Vatee科技引领未来的新高度
    .NET周刊【2月第1期 2024-02-04】
  • 原文地址:https://blog.csdn.net/ARV000/article/details/134088435