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 ...
随机推荐
- jsp声称的java文件位置
想找到JSP生成的字节码文件还是Java文件,这得看你加载Web应用是自己配置的Tomcat还是加载到Eclipse默认路径下:先说Eclipse默认路径下的吧,其路径为:你的eclipse存放工程的 ...
- android SharedPreferences 轻量级存储!
首先在当前进程也就是当前的项目里面进行存储 SharedPreferences.Editor editor = mContext.getSharedPreferences("tvplay&q ...
- NSFileManeger
#define PATH @"/Users/wenhua/testdir" // 删除, 复制 剪切 这些行为都是管理文件的行为 //创建文件 void createFile(v ...
- 多线程(pthread、NSThread、GCD)
pthread C语言编写 跨平台可移植 线程生命周期需要我们来管理 使用困难 NSThread 面向对象的 可直接操作线程对象 线程生命周期需要我们来管理 使用简单 资源互斥(@synchroniz ...
- iOS--通讯录(UITableViewController)
本文主要实现通讯录的部分功能(分组名.索引.分组的组名)等等功能: 废话不多说了,先上效果图: 在工程中需要导入一个plist文件,文件图如图: 工程目录文件如图: 工程程序如图所示: RootTab ...
- 列式存储(三)JFinal DB.tx()事务
上一篇中说道了列式存储中新增表单时后台接收数据问题,在存入数据库时一次插入多条数据,就要用到事务. JFinal中有个封装好的事务应用,用起来非常方便简单. 写法1: Db.tx(new IAtom( ...
- Java基础知识学习(三)
面向对象部分 首先要了解面向对象的思想,与C#一致,都是面向对象的语言 访问修饰符 public 共有的,对所有类可见. protected 受保护的,对同一包内的类和所有子类可见. private ...
- 定义返回Block的函数
鉴于Block与函数的相似性,先从返回函数指针的函数入手 返回函数指针的函数 int fun1(int arg){ return arg + 1;}int fun2(int arg){ return ...
- Virtual Box 杂记
1. Virtual Box后台运行 a. VBoxManage startvm yourvmname --type headlessb. VBoxHeadless --startvm yourvmn ...
- activiti和SSH项目做整合
最近因公司的业务需求,需要使用工作流来做我们业务中的流程审批工作,so 就安排我做了这个工作,发现整合的时候有一些问题,及时的记录下来分享给大家. 介绍: 一.如果你的web项目只是单纯的web项目那 ...