Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个位元为一个单元,对应某个可打印字符。三个字节有24个位元,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。 Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME的email,email via MIME, 在XML中存储复杂数据. 使用的字符包括大小写字母各26个,加上10个数字,和加号「+」,斜杠「/」,一共26×2+10+2=64个字符,等号「=」用来作为后缀用途。

为了方便网络传输出现了web safe base64(尚未标准化)编码,即编码完成后,使用- _ *(或-_.) 替换+ / =

base64 url safe
base64 url safe

base64 table
base64 table

编码 (以单词book为例 )

1.获取每个字符的ascii值,并转化为8位bit

ascii:98|111|111|107|

bits:01100010011011110110111101101011

2.计算字符长度模3的余值

1)剩余1个字符(8bit)时,需要额外填充4bit到尾 部,构成12bit,方能整除6,编码完成加两个==

2)剩余2个字符(16bit)时,需要额外填充2bit到 尾部,构成18bit,方能整除6,编码完成加一个=

011000100110111101101111011010110000

3.以6位为一组,进行分块

011000 100110 111101 101111 011010 110000

4.每块前面用0进行填充,凑成8位

00011000 00100110 00111101 00101111 00011010 00110000

5.每块转换为10进制值,查索引表

24 => Y 38 => m 61 => 9 47 => v 26 => a 48 => w

6.最终编码: Ym9vaw==

原理清楚后,可以参考以下base64代码,建议你试着写一个base32

php代码如下:

 

运行结果:

 

Related Posts

发表评论