关于 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

最新文章

  1. UINavigationController和UIScrollView一起使用时导致UIScrollView位置偏移
  2. Android 中MyApplication
  3. df卡住问题解决
  4. 路由器DHCP 动态主机配置
  5. Mac eclipse找不到source的解决办法
  6. 【python cookbook】【数据结构与算法】18.将名称映射到序列的元素中
  7. Mysql设置字符编码及varchar宽度问题
  8. Arduino &quot;Card failed, or not present&quot;(即找不到SD卡)错误解决方案
  9. Cortex-M3 Context Switching
  10. multithread synchronization use mutex and semaphore
  11. 网页调用QQ聊天
  12. Android应用程序组件Content Provider在应用程序之间共享数据的原理分析
  13. JavaSE教程-03Java中分支语句与四种进制转换
  14. JavaScript学习日志:关于js分号
  15. Pymongo一些常见需求(陆续补充)
  16. 第四周 IP通信基础回顾
  17. 不适合使用hadoop来解决的问题
  18. 用jQuery实现Ajax
  19. Three.js 对模型多个动画切换展示(fbx)
  20. nodejs buffer 内存泄漏问题

热门文章

  1. PHP与Linux进程间的通信
  2. AOP技术应用和研究--OOP
  3. [译]基于Vue.js的10个最佳UI框架,用于构建移动应用程序
  4. OCulus Rift 游戏开发六原则
  5. IQueryFielter接口
  6. jquery如何实现点击标题收缩下面的内容
  7. 详解HTML的a标签(超链接标签)
  8. [CSS] Design for Mobile First with Tachyons
  9. 安装hadoop1.2.1集群环境 分类: A1_HADOOP 2014-08-29 15:49 1444人阅读 评论(0) 收藏
  10. MCMC:Gibbs 采样(matlab 实现)