Base64编码、解码 C语言例子(使用OpenSSL库) [转贴]
clq
浏览(523) -
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
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.