关于 OpenSSL 的介绍及安装请参见:Windows 下编译 OpenSSL

下面主要介绍有关 OpenSSL 使用 base64 编码/解码。

编码/解码

  1. #include <openssl/evp.h>
  2. #include <openssl/bio.h>
  3. #include <openssl/buffer.h>
  4. #include <string>
  5. #include <iostream>
  6. using namespace std;
  7. char * base64Encode(const char *buffer, int length, bool newLine);
  8. char * base64Decode(char *input, int length, bool newLine);
  9. int main(int argc, char* argv[])
  10. {
  11. bool newLine = false;
  12. string input = "Hello World!";
  13. char * encode = base64Encode(input.c_str(), input.length(), newLine);
  14. char * decode = base64Decode(encode, strlen(encode), newLine);
  15. cout << "Base64 Encoded : " << encode << endl;
  16. cout << "Base64 Decoded : " << decode << endl;
  17. cin.get();
  18. }
  19. // base64 编码
  20. char * base64Encode(const char *buffer, int length, bool newLine)
  21. {
  22. BIO *bmem = NULL;
  23. BIO *b64 = NULL;
  24. BUF_MEM *bptr;
  25. b64 = BIO_new(BIO_f_base64());
  26. if (!newLine) {
  27. BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
  28. }
  29. bmem = BIO_new(BIO_s_mem());
  30. b64 = BIO_push(b64, bmem);
  31. BIO_write(b64, buffer, length);
  32. BIO_flush(b64);
  33. BIO_get_mem_ptr(b64, &bptr);
  34. BIO_set_close(b64, BIO_NOCLOSE);
  35. char *buff = (char *)malloc(bptr->length + 1);
  36. memcpy(buff, bptr->data, bptr->length);
  37. buff[bptr->length] = 0;
  38. BIO_free_all(b64);
  39. return buff;
  40. }
  41. // base64 解码
  42. char * base64Decode(char *input, int length, bool newLine)
  43. {
  44. BIO *b64 = NULL;
  45. BIO *bmem = NULL;
  46. char *buffer = (char *)malloc(length);
  47. memset(buffer, 0, length);
  48. b64 = BIO_new(BIO_f_base64());
  49. if (!newLine) {
  50. BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
  51. }
  52. bmem = BIO_new_mem_buf(input, length);
  53. bmem = BIO_push(b64, bmem);
  54. BIO_read(bmem, buffer, length);
  55. BIO_free_all(bmem);
  56. return buffer;
  57. }

输出如下所示:

Base64 Encoded : SGVsbG8gV29ybGQh 
Base64 Decoded : Hello World!

更多参考

http://blog.csdn.net/liang19890820/article/details/52948306

OpenSSL 使用 base64 编码/解码(liang19890820)的更多相关文章

  1. OpenSSL 使用 base64 编码/解码

    简述 关于 OpenSSL 的介绍及安装请参见:Windows下编译OpenSSL 下面主要介绍有关 OpenSSL 使用 base64 编码/解码. 简述 编码解码 更多参考 编码/解码 #incl ...

  2. 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  3. Javascript中Base64编码解码的使用实例

    Javascript为我们提供了一个简单的方法来实现字符串的Base64编码和解码,分别是window.btoa()函数和window.atob()函数. 1 var encodedStr = win ...

  4. Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net

    Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net 1. Base64编码, 1 1.1. 子模式 urlsafe Or  url  ...

  5. Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net

    Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net 1. Base64编码,1 1.1. 子模式 urlsafe Or  url u ...

  6. delphi Base64编码/解码及数据压缩/解压知识

    一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当然还有第三方提供的单元或控件,其中我所接触到的认为比较好的有Indy的TIdMimeEncode / TIdMimeD ...

  7. Code:Base64 编码/解码

    ylbtech-Code:Base64 编码/解码 1. C#返回顶部 1.编码 byte[] inArray = new byte[msgTxt.Length]; int x; ; x < m ...

  8. 原来浏览器原生支持JS Base64编码解码 outside of the Latin1 range

    原来浏览器原生支持JS Base64编码解码 « 张鑫旭-鑫空间-鑫生活 https://www.zhangxinxu.com/wordpress/2018/08/js-base64-atob-bto ...

  9. 王小胖之 Base64编码/解码

    使用场景:编码网址作为URL参数,简单编码或加密数据,下载地址生成或解析. 实现功能:BASE64在线编码和解码. 数据实例:王小胖好啊,王小胖顶呱呱!! ~~ english 123 !@#$%^& ...

随机推荐

  1. swift开发网络篇—NSURLConnection基本使用

    iOS开发网络篇—NSURLConnection基本使用 一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据 ...

  2. 6、修改应用程序数码相框以支持自动关闭LCD

    1. 修改数码相框以自动关闭LCD关闭LCD : 在读取触摸屏的函数中判断:如果15S内无数据,执行: echo auto > /sys/devices/platform/mylcd/power ...

  3. ZOJ 1101 Gamblers 二分

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=101 让你在一堆互不相同的数中查找是否有a=b+c+d,若有不同的解,则输出最大 ...

  4. Vim技巧之四大模式_插入模式

    Vim技巧之四大模式_插入模式 在插入模式中及时更正错误 插入-普通模式 在插入模式模式以下直接粘贴指定寄存器的内容 插入模式中做运算 用字符编码插入很常使用字符 替换已有的文本 Vim技巧之四大模式 ...

  5. js进阶 11-24 jquery如何实现选项卡的制作

    js进阶 11-24 jquery如何实现选项卡的制作 一.总结 一句话总结:ul>li做选项卡的选项卡头,多个div做选项卡的内容,点到对应的li,就切换到对应的div,用index()获取l ...

  6. 关于.c和.h 和定义变量的问题

    最初调试的时候是因为有个错误在wavplay.h文件中 于是我跳到了recorderl.h中:从图中看到引用了main.h 出现这个问题的具体原因还是不太清楚: 不过我任务是因为: wavplay.h ...

  7. 【54.08%】【BZOJ 1941】Hide and Seek

    Time Limit: 16 Sec  Memory Limit: 162 MB Submit: 919  Solved: 497 [Submit][Status][Discuss] Descript ...

  8. Thinking in UML 学习笔记(二)——UML核心视图之用例图

    在UML中,需求模型又称为用例模型,它主要用于描述系统的功能性需求,即软件可以实现的功能,如登录.注册.入库.出库.查看库存报表.增加员工信息等.常规的用例建模一般包括两个组成部分:绘制用例图和编写用 ...

  9. Ajax请求Session超时的解决办法:拦截器 + 封装jquery的post方法

    目标:前端系统,后端系统等,统一处理Session超时和系统错误的问题. 可能需要处理的问题:Session超时.系统500错误.普通的业务错误.权限不足. 同步请求:            Sess ...

  10. 【codeforces 750B】New Year and North Pole

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...