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存放工程的 ...
- Java 项目JDBC 链接数据库中会出现的错误
1.出现的地方 package com.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql ...
- HTTPS时代全面到来,你准备好了吗?
近一年可能有很多朋友发现在使用百度搜索时,是这个样子的 如我们所见,浏览器地址栏里的HTTP可能将成为永远的过去时,取而代之的是更安全的HTTPS. 首先,HTTPS是什么? HTTPS是Http O ...
- Mac下载安装Android Studio教程
今天把公司闲置的一台Mac-mini重装了下系统感觉用着速度还不错,平时上班用的机器USB有些问题,所以打算用这台Mac.以往开发用Intellij Idea就够用,但是这次项目引用的jar包太多,遭 ...
- Android touch mode和focusableInTouchMode分析
首先我们来看看touch mode的定义.它是用户和手机进行交互时view层次结构的一个状态.它本身是很容易理解的, 代表了最近一次的交互是否是通过触摸屏发生的,因为在Android设备上还存在别的交 ...
- db2+python+sqlchemy环境的搭建
记录了通过sqlalchemy 管理db2数据库的环境搭建 1.db2数据库安装配置 利用winscp复制iso文件到/mnt/IBM_db2 目录下 IBM_db2为自己创建 重命名 mv IBM\ ...
- Java是如何处理别名(aliasing)的
什么是Java别名(aliasing) 别名意味着有多个别名指向同一个位置,且这些别名有不同的类型. 在下面的代码例子中,a和b是两个不同的名字,有不同的类型A和B,B继承A B[] b = new ...
- 【AdaBoost算法】弱分类器训练过程
一.加载数据(正样本.负样本特征) def loadSimpData(): #样本特征 datMat = matrix([[ 1. , 2.1, 0.3], [ 2. , 1.1, 0.4], [ 1 ...
- ORACLE 如何查看索引重建进度情况
在ORACLE数据库中,如果一个比较大的索引在重建过程中耗费时间比较长,那么怎么查看索引重建耗费的时间,以及完成了多少(比例)了呢,我们可以通过V$SESSION_LONGOPS视图来查看索引重建的时 ...
- 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类
static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...