C语言实现Base64编码解码

Encode

static const char base[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
bool base64_encode(const char * p, char **outptr, int length,int* outlen)
{int j = 0;int flag=0;char *output;char *base64;base64 = output = (char *)malloc(length * 4 / 3 + 4);const char *str = p;unsigned char ibuf[3];unsigned char obuf[4];int insize = length;while (insize >0){for (j = flag=0; j < 3; j++){if (insize > 0) {flag ++;ibuf[j] = (unsigned char)*str;str++;insize--;}else{ibuf[j] = 0;}}obuf[0] = (unsigned char)((ibuf[0] & 0xfc) >> 2);obuf[1] = (unsigned char)((ibuf[0] & 0x03) << 4) | ((ibuf[1] & 0xf0) >> 4);obuf[2] = (unsigned char)((ibuf[1] & 0x0f) << 2) | ((ibuf[2] & 0xc0) >> 6);obuf[3] = (unsigned char)(ibuf[2] & 0x3f);switch (flag){case 1:snprintf(output,5,"%c%c==", base[obuf[0]], base[obuf[1]]);break;case 2:snprintf(output, 5, "%c%c%c=", base[obuf[0]], base[obuf[1]], base[obuf[2]]);break;default:snprintf(output, 5, "%c%c%c%c", base[obuf[0]], base[obuf[1]], base[obuf[2]], base[obuf[3]]);break;}output += 4;}*output = '\0';*outptr = base64;*outlen= strlen(base64);return true;
}

Decode

unsigned char buf_to_index(const char c)
{char i = 0;while (*base!= EOF){if (base[i] == c){return (unsigned char)(i);}i++;}
}
bool base64_decode(const char * p, char **outptr, int length, int* outlen)
{const char* str = p;int insize = length;int j = 0;char* output;char* base64;int len = length / 4 * 3;output = base64 = (char*)malloc(len);unsigned char ibuf[4];unsigned char obuf[3];int flag = 0;while (insize>0){for (j = 0; j < 4; j++){if (*str=='='){flag++;}ibuf[j] = buf_to_index(*str);str++;insize--;}obuf[0] = (ibuf[0]<<2)|((ibuf[1]&0x30)>>4);obuf[1] = ((ibuf[1] & 0x0F) <<4)| ((ibuf[2] & 0X3C)>> 2);obuf[2] = ((ibuf[2] & 0x03) <<6) | (ibuf[3]);snprintf(output, 4, "%c%c%c", obuf[0], obuf[1], obuf[2]);output += 3;}switch (flag){case 1:len -= 1;break;case 2:len -= 2;break;default:break;}*output = '\0';*outptr = base64;*outlen = len;return true;
}

C语言实现Base64编码解码相关推荐

  1. Java Base64 编码解码方案总结

    转载自  Java Base64 编码解码方案总结 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便.在实际应 ...

  2. 原来浏览器原生支持JS Base64编码解码

    原来浏览器原生支持JS Base64编码解码 转载来源:https://www.zhangxinxu.com/wordpress/2018/08/js-base64-atob-btoa-encode- ...

  3. base64编码解码讲解

    一.base64 base64是一种对字符通过二进制进行编码解码转换的一种编码算法,便于在不同环境间通信,规避了乱码的出现. base64算法: 1->字符串转换为三个字节一组,不足三个字节时用 ...

  4. js base64 编码解码

    js base64 编码解码 encode decode,可以直接使用 function Base64() {// private property_keyStr = "ABCDEFGHIJ ...

  5. python使用base64编码解码数据

    python使用base64编码解码数据 base64模块是用来作base64编码解码,常用于小型数据的传输.编码后的数据是一个字符串,其包括a-z.A-Z.0-9./.+共64个字符,即可用6个字节 ...

  6. java svgbase64转byte_java 图片进行base64 编码解码

    java 图片进行base64 编码解码 刘振兴 代码分享 2017年06月07日 10555 2条评论 import sun.misc.BASE64Decoder; import sun.misc. ...

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

    openssl 加密字符串的方法: 一.利用openssl命令进行BASE64编码解码(base64 encode/decode): 1. BASE64编码命令 对字符串'abc'进行base64编码 ...

  8. Java工程中引用Base64编码解码小记

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一. Base64编码说明 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两 ...

  9. 一些Base64编码/解码及数据压缩/解压方面的知识

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

最新文章

  1. AI泡沫之上,创业公司的护城河和边界扩张
  2. java stream 转 file_java 中 byte[]、File、InputStream 互相转换
  3. 关于JS面向对象、设计模式、以及继承的问题总结
  4. spring 全局变量_精华:关于Spring的15点总结
  5. Process.Start() 传递参数中有空格问题
  6. 原来评分卡模型的概率是这么校准的!
  7. vue v-model 简单使用
  8. 揭秘TensorFlow:Google开源到底开的是什么?
  9. Zara带你快速入门WPF(4)---Command与功能区控件
  10. 运行时间_运行一段时间报高压保护
  11. 基于java TCP实现网络通信聊天室《建议收藏附完整源码》
  12. 【报告分享】基础设施的新兴趋势-毕马威.pdf(附pdf下载链接)
  13. php更改html内容,请问你们怎么将html的文件的内容改变为php
  14. matlab smooth函数_基于Matlab的机械臂路径规划
  15. SQL Server compute [by]
  16. 45.更新一下scrapy爬取工商信息爬虫代码
  17. 什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?00后的世界我不懂!
  18. python数据结构二叉树的查找算法_在路上---学习篇(一)Python 数据结构和算法 (5)二分查找、二叉树遍历...
  19. ant vue 的datepicker类组件中英文混合显示解决
  20. 【MongoDB】安全认证

热门文章

  1. 交易所安全测试--信息泄露
  2. MT6357 PMIC datasheet,MT6357数据手册,MT6357原厂资料介绍
  3. msm8909 Android6.0杂记
  4. 如何用Java将excel数据导入数据库
  5. 使用 iCloud API 的正确姿势
  6. HTTP的缓存机制是什么?
  7. chatgpt训练自己的数据python版
  8. 雅思在线模拟测试软件,雅思在线模拟测试:语法测试题
  9. 清华牛人的跨专业考研经验(金融专业)【zz】
  10. DevelopTraining(20)---执行网络操作