OpenSSL 使用 base64 编码/解码(liang19890820)
2024-09-02 00:59:15
关于 OpenSSL 的介绍及安装请参见:Windows 下编译 OpenSSL
下面主要介绍有关 OpenSSL 使用 base64 编码/解码。
编码/解码
#include <openssl/evp.h>
#include <openssl/bio.h>
#include <openssl/buffer.h>
#include <string>
#include <iostream>
using namespace std;
char * base64Encode(const char *buffer, int length, bool newLine);
char * base64Decode(char *input, int length, bool newLine);
int main(int argc, char* argv[])
{
bool newLine = false;
string input = "Hello World!";
char * encode = base64Encode(input.c_str(), input.length(), newLine);
char * decode = base64Decode(encode, strlen(encode), newLine);
cout << "Base64 Encoded : " << encode << endl;
cout << "Base64 Decoded : " << decode << endl;
cin.get();
}
// base64 编码
char * base64Encode(const char *buffer, int length, bool newLine)
{
BIO *bmem = NULL;
BIO *b64 = NULL;
BUF_MEM *bptr;
b64 = BIO_new(BIO_f_base64());
if (!newLine) {
BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
}
bmem = BIO_new(BIO_s_mem());
b64 = BIO_push(b64, bmem);
BIO_write(b64, buffer, length);
BIO_flush(b64);
BIO_get_mem_ptr(b64, &bptr);
BIO_set_close(b64, BIO_NOCLOSE);
char *buff = (char *)malloc(bptr->length + 1);
memcpy(buff, bptr->data, bptr->length);
buff[bptr->length] = 0;
BIO_free_all(b64);
return buff;
}
// base64 解码
char * base64Decode(char *input, int length, bool newLine)
{
BIO *b64 = NULL;
BIO *bmem = NULL;
char *buffer = (char *)malloc(length);
memset(buffer, 0, length);
b64 = BIO_new(BIO_f_base64());
if (!newLine) {
BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
}
bmem = BIO_new_mem_buf(input, length);
bmem = BIO_push(b64, bmem);
BIO_read(bmem, buffer, length);
BIO_free_all(bmem);
return buffer;
}
输出如下所示:
Base64 Encoded : SGVsbG8gV29ybGQh
Base64 Decoded : Hello World!
更多参考
http://blog.csdn.net/liang19890820/article/details/52948306
最新文章
- UINavigationController和UIScrollView一起使用时导致UIScrollView位置偏移
- Android 中MyApplication
- df卡住问题解决
- 路由器DHCP 动态主机配置
- Mac eclipse找不到source的解决办法
- 【python cookbook】【数据结构与算法】18.将名称映射到序列的元素中
- Mysql设置字符编码及varchar宽度问题
- Arduino ";Card failed, or not present";(即找不到SD卡)错误解决方案
- Cortex-M3 Context Switching
- multithread synchronization use mutex and semaphore
- 网页调用QQ聊天
- Android应用程序组件Content Provider在应用程序之间共享数据的原理分析
- JavaSE教程-03Java中分支语句与四种进制转换
- JavaScript学习日志:关于js分号
- Pymongo一些常见需求(陆续补充)
- 第四周 IP通信基础回顾
- 不适合使用hadoop来解决的问题
- 用jQuery实现Ajax
- Three.js 对模型多个动画切换展示(fbx)
- nodejs buffer 内存泄漏问题
热门文章
- PHP与Linux进程间的通信
- AOP技术应用和研究--OOP
- [译]基于Vue.js的10个最佳UI框架,用于构建移动应用程序
- OCulus Rift 游戏开发六原则
- IQueryFielter接口
- jquery如何实现点击标题收缩下面的内容
- 详解HTML的a标签(超链接标签)
- [CSS] Design for Mobile First with Tachyons
- 安装hadoop1.2.1集群环境 分类: A1_HADOOP 2014-08-29 15:49 1444人阅读 评论(0) 收藏
- MCMC:Gibbs 采样(matlab 实现)