如何使用openssl加载pkcs12并将其转换为char *?

用户名

我想使用openssl加载pkcs12并将其编码为base64。我不需要解析它只是为了加载它,然后将其编码为base64,因此当我对其进行解码并将其内容放入文件中时,我将再次具有pkcs12结构。

char* loadPkcs12(const char* path) {

    FILE *fp;
    PKCS12 *p12;

    OpenSSL_add_all_algorithms();
    ERR_load_crypto_strings();
    if (!(fp = fopen(path, "rb"))) {
        fprintf(stderr, "Error opening file %s\n", path);
        exit(1);
    }
    p12 = d2i_PKCS12_fp(fp, NULL);
    fclose(fp);
    if (!p12) {
        fprintf(stderr, "Error reading PKCS#12 file\n");
        ERR_print_errors_fp(stderr);
        exit(1);
    }
    //here I am trying to encode it
    BIO* bio;
    bio = BIO_new(BIO_s_mem());
    i2d_PKCS12_bio(bio, p12);
    BUF_MEM *bufferPtr;
    BIO_get_mem_ptr(bio, &bufferPtr);
    printf(toBase64(bufferPtr->data));

    PKCS12_free(p12);
    return 0;
}

char* toBase64(char* str) {
    BIO *bio, *b64;
    BUF_MEM *bufferPtr;

    b64 = BIO_new(BIO_f_base64());
    bio = BIO_new(BIO_s_mem());
    bio = BIO_push(b64, bio);

    BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL); //Ignore newlines - write everything in one line
    BIO_write(bio, str, strlen(str));
    BIO_flush(bio);
    BIO_get_mem_ptr(bio, &bufferPtr);
    BIO_set_close(bio, BIO_NOCLOSE);
    BIO_free_all(bio);
    char* output;

    output = (*bufferPtr).data;
    return output;
}

我知道对Base64的编码有效,将PKCS12转换为char *时出现问题。我的输出现在只有大约60个字符,应该更长一些。有没有办法将PKCS12转换为char *缓冲区?谢谢你的建议。

w

我的输出现在只有大约60个字符,应该更长一些。有没有办法将PKCS12转换为char *缓冲区?

我相信toBase64需要一个指针和一个长度,以防存在任何嵌入的NULL:

BUF_MEM *bufferPtr = NULL;
BIO_get_mem_ptr(bio, &bufferPtr);

if(bufferPtr != NULL) {
    if(bufferPtr->data && bufferPtr->length > 0)
        printf(toBase64(bufferPtr->data, bufferPtr->length));
}

和:

char* toBase64(char* str, int length) {
    ...
}

理想情况下,您可以使用aunsigned char*而不是achar*作为指针;size_t而不是int对长度。但是那艘船已经航行了。

另外,请确保在Base64字符串上有一个NULL终止符。我不记得它是否自动添加的。


相关的,您可以将BIO与链接在一起BIO_push请参见上的手册页BIO_push(3)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用openssl加载pkcs12并将其转换为char *?

来自分类Dev

如何使用 openssl 模块将密码传递给 pkcs12 转换?

来自分类Dev

如何在Java中将pkcs8转换为pkcs12

来自分类Dev

使用openssl将多个证书加载到PKCS12中

来自分类Dev

转换为PKCS12 v1.0

来自分类Dev

JNI。如何从jobject获取jstring并将其转换为char *

来自分类Dev

使用SecItemImport导入PKCS12

来自分类Dev

PHPSECLIB生成没有openssl的PKCS12?

来自分类Dev

如何获取c函数字节并将其转换为char

来自分类Dev

如何加载JSON文件并将其转换为特定类型的对象?

来自分类Dev

如何加载UTC数字日期并将其转换为unix + new Date()?

来自分类Dev

如何将javascript数组转换为php数组并将其加载到div中

来自分类Dev

解析整数并将其转换为char代码的脚本

来自分类Dev

如何转换JSON文件并将其转换为CSV并使用数据框保持标题

来自分类Dev

如何使用Class.forName实例化对象并将其转换为正确的类型?

来自分类Dev

如何使用SqlDataReader获取位值并将其转换为bool?

来自分类Dev

如何使用云代码压缩图像并将其转换为渐进图像?

来自分类Dev

如何使用新的Google Vision API生成条形码并将其转换为位图?

来自分类Dev

如何通过模式识别列并将其转换为使用R的日期时间?

来自分类Dev

如何从CouchDB中检索所有文档并将其转换为使用Python的CSV格式

来自分类Dev

如何使用定界符分割字符串并将其转换为整数

来自分类Dev

如何使用云代码压缩图像并将其转换为渐进图像?

来自分类Dev

如何使用php删除一些代码并将其转换为变量

来自分类Dev

我如何使用laravel从表单请求中接受对象并将其转换为数组

来自分类Dev

如何找到txt文件中使用的分隔符并将其转换为逗号分隔的csv?

来自分类Dev

如何从PKCS#12容器中提取私钥并将其保存为PKCS#8格式?

来自分类Dev

如何对整数求和并将其转换为时间

来自分类Dev

如何获取IEnumerable结果并将其转换为列表<treenode>

来自分类Dev

如何反转单链列表并将其转换为向量?

Related 相关文章

  1. 1

    如何使用openssl加载pkcs12并将其转换为char *?

  2. 2

    如何使用 openssl 模块将密码传递给 pkcs12 转换?

  3. 3

    如何在Java中将pkcs8转换为pkcs12

  4. 4

    使用openssl将多个证书加载到PKCS12中

  5. 5

    转换为PKCS12 v1.0

  6. 6

    JNI。如何从jobject获取jstring并将其转换为char *

  7. 7

    使用SecItemImport导入PKCS12

  8. 8

    PHPSECLIB生成没有openssl的PKCS12?

  9. 9

    如何获取c函数字节并将其转换为char

  10. 10

    如何加载JSON文件并将其转换为特定类型的对象?

  11. 11

    如何加载UTC数字日期并将其转换为unix + new Date()?

  12. 12

    如何将javascript数组转换为php数组并将其加载到div中

  13. 13

    解析整数并将其转换为char代码的脚本

  14. 14

    如何转换JSON文件并将其转换为CSV并使用数据框保持标题

  15. 15

    如何使用Class.forName实例化对象并将其转换为正确的类型?

  16. 16

    如何使用SqlDataReader获取位值并将其转换为bool?

  17. 17

    如何使用云代码压缩图像并将其转换为渐进图像?

  18. 18

    如何使用新的Google Vision API生成条形码并将其转换为位图?

  19. 19

    如何通过模式识别列并将其转换为使用R的日期时间?

  20. 20

    如何从CouchDB中检索所有文档并将其转换为使用Python的CSV格式

  21. 21

    如何使用定界符分割字符串并将其转换为整数

  22. 22

    如何使用云代码压缩图像并将其转换为渐进图像?

  23. 23

    如何使用php删除一些代码并将其转换为变量

  24. 24

    我如何使用laravel从表单请求中接受对象并将其转换为数组

  25. 25

    如何找到txt文件中使用的分隔符并将其转换为逗号分隔的csv?

  26. 26

    如何从PKCS#12容器中提取私钥并将其保存为PKCS#8格式?

  27. 27

    如何对整数求和并将其转换为时间

  28. 28

    如何获取IEnumerable结果并将其转换为列表<treenode>

  29. 29

    如何反转单链列表并将其转换为向量?

热门标签

归档