C语言实现Base64编码解码
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编码解码相关推荐
- Java Base64 编码解码方案总结
转载自 Java Base64 编码解码方案总结 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便.在实际应 ...
- 原来浏览器原生支持JS Base64编码解码
原来浏览器原生支持JS Base64编码解码 转载来源:https://www.zhangxinxu.com/wordpress/2018/08/js-base64-atob-btoa-encode- ...
- base64编码解码讲解
一.base64 base64是一种对字符通过二进制进行编码解码转换的一种编码算法,便于在不同环境间通信,规避了乱码的出现. base64算法: 1->字符串转换为三个字节一组,不足三个字节时用 ...
- js base64 编码解码
js base64 编码解码 encode decode,可以直接使用 function Base64() {// private property_keyStr = "ABCDEFGHIJ ...
- python使用base64编码解码数据
python使用base64编码解码数据 base64模块是用来作base64编码解码,常用于小型数据的传输.编码后的数据是一个字符串,其包括a-z.A-Z.0-9./.+共64个字符,即可用6个字节 ...
- java svgbase64转byte_java 图片进行base64 编码解码
java 图片进行base64 编码解码 刘振兴 代码分享 2017年06月07日 10555 2条评论 import sun.misc.BASE64Decoder; import sun.misc. ...
- openssl算法 —— 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密
openssl 加密字符串的方法: 一.利用openssl命令进行BASE64编码解码(base64 encode/decode): 1. BASE64编码命令 对字符串'abc'进行base64编码 ...
- Java工程中引用Base64编码解码小记
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一. Base64编码说明 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两 ...
- 一些Base64编码/解码及数据压缩/解压方面的知识
一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当然还有第三方提供的单元或控件,其中我所接触到的认为比较好的有Indy的TIdMimeEncode / TIdMimeD ...
最新文章
- AI泡沫之上,创业公司的护城河和边界扩张
- java stream 转 file_java 中 byte[]、File、InputStream 互相转换
- 关于JS面向对象、设计模式、以及继承的问题总结
- spring 全局变量_精华:关于Spring的15点总结
- Process.Start() 传递参数中有空格问题
- 原来评分卡模型的概率是这么校准的!
- vue v-model 简单使用
- 揭秘TensorFlow:Google开源到底开的是什么?
- Zara带你快速入门WPF(4)---Command与功能区控件
- 运行时间_运行一段时间报高压保护
- 基于java TCP实现网络通信聊天室《建议收藏附完整源码》
- 【报告分享】基础设施的新兴趋势-毕马威.pdf(附pdf下载链接)
- php更改html内容,请问你们怎么将html的文件的内容改变为php
- matlab smooth函数_基于Matlab的机械臂路径规划
- SQL Server compute [by]
- 45.更新一下scrapy爬取工商信息爬虫代码
- 什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?00后的世界我不懂!
- python数据结构二叉树的查找算法_在路上---学习篇(一)Python 数据结构和算法 (5)二分查找、二叉树遍历...
- ant vue 的datepicker类组件中英文混合显示解决
- 【MongoDB】安全认证