登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: Base64编码、解码 C语言例子(使用OpenSSL库) [转贴]    [最新]     [回主站]
Base64编码、解码 C语言例子(使用OpenSSL库) [转贴]
clq
浏览(184) - 2018-02-08 12:13:10 发表 编辑

关键字: openssl

Base64编码、解码 C语言例子(使用OpenSSL库) [转贴]

标签: base64OpenSSLc
2017-03-01 20:51 2398人阅读 评论(0) 收藏 举报
分类:
C学习笔记(13)

http://blog.csdn.net/lell3538/article/details/59137414

    #include <stdio.h> 
    #include <string.h> 
    #include <unistd.h> 
     
    #include <openssl/pem.h> 
    #include <openssl/bio.h> 
    #include <openssl/evp.h> 
     
    int base64_encode(char *in_str, int in_len, char *out_str) 
    { 
        BIO *b64, *bio; 
        BUF_MEM *bptr = NULL; 
        size_t size = 0; 
     
        if (in_str == NULL || out_str == NULL) 
            return -1; 
     
        b64 = BIO_new(BIO_f_base64()); 
        bio = BIO_new(BIO_s_mem()); 
        bio = BIO_push(b64, bio); 
     
        BIO_write(bio, in_str, in_len); 
        BIO_flush(bio); 
     
        BIO_get_mem_ptr(bio, &bptr); 
        memcpy(out_str, bptr->data, bptr->length); 
        out_str[bptr->length] = '\0'; 
        size = bptr->length; 
     
        BIO_free_all(bio); 
        return size; 
    } 
     
    int base64_decode(char *in_str, int in_len, char *out_str) 
    { 
        BIO *b64, *bio; 
        BUF_MEM *bptr = NULL; 
        int counts; 
        int size = 0; 
     
        if (in_str == NULL || out_str == NULL) 
            return -1; 
     
        b64 = BIO_new(BIO_f_base64()); 
        BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); 
     
        bio = BIO_new_mem_buf(in_str, in_len); 
        bio = BIO_push(b64, bio); 
     
        size = BIO_read(bio, out_str, in_len); 
        out_str[size] = '\0'; 
     
        BIO_free_all(bio); 
        return size; 
    } 
     
    int main() 
    { 
        char instr[] = "hello"; 
        char outstr1[1024] = {0}; 
        base64_encode(instr,5,outstr1); 
        printf("base64:%s\n",outstr1); 
     
        char outstr2[1024] = {0}; 
        base64_decode(outstr1,strlen(outstr1),outstr2); 
        printf("str:%s\n",outstr2); 
        return 0; 
    } 


编译及运行:

$ gcc base64.c -lcrypto

$ ./a.out

结果:

base64:aGVsbG8=



str:hello





注意:

在base64_encode的时候返回的base64编码自带换行,所以大家在使用的时候要注意,以免因为多了个换行而出现bug



总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1