php base64 原理
#include <stdio.h>
#include <stdlib.h>
#include <string.h> static const char base64_table[] ={
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'', '', '', '', '', '', '', '', '', '', '+', '/', '\0'
}; unsigned char *base64_encode(const unsigned char *str)
{
static const char base64_pad = '=';
const unsigned char *current = str;
int length = strlen(str);
unsigned char *p, *result; //检测 result = (unsigned char *)malloc(((length + ) / ) * * sizeof(char) + );
p = result; while(length > ){
*p++ = base64_table[current[] >> ];
*p++ = base64_table[((current[] & 0x03) << ) + (current[] >> )];
*p++ = base64_table[((current[] & 0x0f) << ) + (current[] >> )];
*p++ = base64_table[current[] & 0x3f]; current += ;
length -= ;
} if(length == ){
*p++ = base64_table[current[] >> ];
*p++ = base64_table[((current[] & 0x03) << ) + (current[] >> )];
*p++ = base64_table[(current[] & 0x0f) << ];
*p++ = base64_pad;
}else if(length == ){
*p++ = base64_table[current[] >> ];
*p++ = base64_table[(current[] & 0x03) << ];
*p++ = base64_pad;
*p++ = base64_pad;
} *p = '\0';
return result;
} static int base64_decode_map[] = {
-, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, // 0 - 15
-, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, // 16 - 31
-, -, -, -, -, -, -, -, -, -, -, , -, -, -, , // 32 - 47
, , , , , , , , , , -, -, -, -, -, -, // 48 - 63
-, , , , , , , , , , , , , , , , // 64 - 79
, , , , , , , , , , , -, -, -, -, -, // 80 - 95
-, , , , , , , , , , , , , , , , // 96 - 111
, , , , , , , , , , , -, -, -, -, -, // 112 - 127
-, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, // 128 - 143
-, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, // 144 - 159
-, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, // 160 - 175
-, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, // 176 - 191
-, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, // 192 - 207
-, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, // 208 - 223
-, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, // 224 - 239
-, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, // 240 - 255
}; char *base64_decode(const char *input, char *output)
{
output[] = '\0'; int input_len = strlen(input);
if(input_len < || input_len % != ){
return output;
} char *p = (char *)input;
char *p_out = output;
char *p_end = (char *)input + input_len; for(; p < p_end; p += ){
*p_out++ = ((base64_decode_map[p[]] << ) & 0xFC) | ((base64_decode_map[p[]] >> ) & 0x03);
*p_out++ = ((base64_decode_map[p[]] << ) & 0xF0) | ((base64_decode_map[p[]] >> ) & 0x0F);
*p_out++ = ((base64_decode_map[p[]] << ) & 0xC0) | ((base64_decode_map[p[]]));
} if(*(input + input_len - ) == '='){
*(p_out - ) = '\0';
}else if(*(input + input_len - ) == '='){
*(p_out - ) = '\0';
} return output;
} int main(){
unsigned char *ps = "";
unsigned char *ret = base64_encode(ps);
char output[];
memset(output, , sizeof output);
base64_decode(ret, output);
printf("%s, %s\n", ret, output);
}
php base64 原理的更多相关文章
- Base64原理
一.Base64编码由来 为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就 不能通过邮件传送.这样用途就受到了很大的 ...
- Base64原理解析
一. Base64编码由来 为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就 不能通过邮件传送.这样用途就受到了很大 ...
- Base64原理解析与使用
一.Base64编码由来 为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就 不能通过邮件传送.这样用途就受到了很大的 ...
- 一份简明的 Base64 原理解析
书接上回,在 记一个 Base64 有关的 Bug 一文里,我们说到了 Base64 的编解码器有不同实现,交叉使用它们可能引发的问题等等. 这一回,我们来对 Base64 这一常用编解码技术的原理一 ...
- base64原理,使用场景
Base64编码,是我们程序开发中经常使用到的编码方法.它是一种基于用64个可打印字符来表示二进制数据的表示方法.它通常用作存储.传输一些二进制数据编码方法!也是MIME(多用途互联网邮件扩展,主要用 ...
- Base64原理简介
Base64是一种编码方式,通常用于将二进制数据转换成可见字符的形式,该过程可逆. 过程大致如下: 1. 对64个可见字符,进行一个索引编码.索引是二进制的值,对应找到一个可见字符. Base64 编 ...
- Base64原理与实现
Base64编码说明 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式. 如果剩下的字符不足3个字节,则用0填充 ...
- base64 原理
Base64编码之所以称为Base64,是因为其使用64个字符来对任意数据进行编码,同理有Base32.Base16编码.标准Base64编码使用的64个字符为: 这64个字符是各种字符编码(比如AS ...
- Base64原理 bits 3->4 8bits/byte-->6bits/byte
实践: window.btoa('a')a YQ==abcdef YWJjZGVmabc YWJjab YWI= https://en.wikipedia.org/wiki/Base64 The Ba ...
随机推荐
- node.js Tools for Visual Studio 介绍
node.js Tools for Visual Studio简称NTVS 项目 安装包地址:https://nodejstools.codeplex.com 目前支持2012和2013
- Android中将xml布局文件转化为View树的过程分析(下)-- LayoutInflater源码分析
在Android开发中为了inflate一个布局文件,大体有2种方式,如下所示: // 1. get a instance of LayoutInflater, then do whatever yo ...
- Filestream 使用简单步骤
为了减少大文件在数据库的存储对数据库的读写效率造成的压力,多了FileStream这一个功能,下面介绍一下如何快速使用FileStream. 1.开启SqlServer实例对FileStream 的开 ...
- html页面高亮关键词
function hightLightTheKeyWord(searchParam,$dom){ if(searchParam&&!/^\s*$/.test(searchParam)) ...
- iOS解决隐藏导航栏后,打开照片选择器后导航栏不显示的问题以及更换导航栏背景色
问题描述: 遇到一种情况,在一个控制器上(隐藏了导航栏),打开照片选择器 UIImagePickerController后,照片选择器头部一片空白,且上滑相册时,信息会有错乱效果. 原因分析: 通过查 ...
- Eclipse快捷键-方便查找
[Ct rl+T] 搜索当前接口的实现类 1. [ALT +/] 此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类.方法和属性的名字时,多体验一下[ ...
- js中的继承
js中继承的实现方式很多,此处给出两种常用方式. <!DOCTYPE html> <html> <head> <meta charset='UTF-8'> ...
- 用FineReport报表系统构建资金监管平台
一.应用背景 计算机的应用已经渗透到日常工作的许多方面,无论是其自身还是所发挥的作用,计算机都标志着一种高科技,使工作高效率和高水平.为了能更方便,更轻松,更好的管理,信息化建设正在日益发展壮大,更加 ...
- 汽车4S店经验指标完成情况报表制作分享
集团公司一般为了加强下属的经营管理,以及项经营指标完情况,需要制定一些报表.我们平时也经常遇到这种情况,而这些报表要包括什么内容呢?该怎么制作呢?用什么制作呢?今天小编就以4s店为例,分享给大家一个报 ...
- json与jsonp小结
json 1. json 的值可以是下面这些类型: ① 数字(整数或浮点数),比如123,1.23 ② 字符串(在双引号中) ③ 逻辑值(true 或 false) ④ 数组(在方括号中) ⑤ 对象( ...