Base64编码简介 Base64编码转换原理及算法
Base64编码是我们在程序开发中经常使用的一种编码方法。这是一种基于用64个可打印字符表示二进制数据的表示方法。它通常被用作存储和传输一些二进制数据的编码方法!也是MIME(多用途Internet Mail Extension,主要作为电子邮件标准)中可打印字符表示的二进制数据的常用编码方式!其实只是定义可打印字符内容传输的一种方式,不会产生新的字符集!有时候,在学习了转换的思想之后,我们实际上可以根据自己的实际需求来构造一些接口定义的编码方法。好了,我们来看看它的转型思路吧!
Base64实现了转换原理。
这是一种用64个可打印字符表示所有二进制数据的方法。由于2的6次幂等于64,所以每6位可以用作一个单位,以对应于某个可打印字符。我们知道三个字节有24位,正好可以对应四个Base64单位,也就是说三个字节需要用四个Base64可打印字符表示。Base64中的可打印字符包括字母a-z、A-Z和数字0-9,因此总共有62个字符。此外,在不同的系统中,这两个可打印的符号通常是不同的。但是,我们常说Base64的另外两个字符是“/”。这64个字符对应于下表。
序列号字符序列号字符序列号字符序列号字符0a 16q 32g 48 w 1 b 17 r 33h 49 x2c 18 s34i 50 y3 d 19t 35j 51 Z4 e 20 u 36k 5205 f 21v 37 l 5316g 22 w38m。527h 23 x 39n 55 3 8 I 24y 40 o 56 4 9j 25 z 41 p 57 5 10k 26 a 42 q 58 6 11 l 27 b 43 r 59 7 12m 28 c 44s 60 8 13n 29d 45t 61 9 14 o 30 e 46 u 62 15 p 31 f 47v 63/base64编码转换算法和转换原理。
在转换过程中,三个字节的数据被连续放入一个24位缓冲区,第一个字节占据高位。如果数据少于3个字节,缓冲区中的剩余位由0补充。然后,一次取出6位,根据其值选择abcdefghijklmnopqrstuvwxyzabbcdefghijklmnopqrstuvxyz 0123456789/中的字符作为编码输出。继续,直到所有输入数据转换完成。
如果最后还剩两个输入数据,在编码结果后加“=”;如果最后还剩一个输入数据,在编码结果后加两个“=”;如果没有剩余数据,不要添加任何内容,以确保数据恢复的正确性。
编码后的数据比原始数据稍长,是原始数据的4/3。所有字符都将被编码,因此与带引号的可打印编码不同,一些可打印字符将保留。因此,它的可读性不如Quoted-printable编码!
Text a n Ascii代码77 97 110二进制位0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0索引19 22 5 46 Base64代码T W F u M ascii代码是77,前六位数字对应19,对应的Base64字符是T,以此类推。其他字符代码可以自动转换!让我们看看另一个是否只有3个字节!
文本(1字节)A二进制位0 1 0 0 0 1二进制位(补码0) 0 1 000 01 000 base64编码Q Q==文本(2字节)B C二进制位0 1 000 01 00 000 1 x x x x x二进制。位(补码0)0 100 00 1 00 1 00 1 00 00 1 00 x x x x x Base64编码Q k M=Base64转换码的实现。
现在我们知道了方法,我们自己写一个简单的转换似乎很容易!接下来,我写下我的php代码进行转换!
/** *base64编码方法,这个方法只是为了说明base64的代码转换过程。通过这个例子,不同语言版本的* @作者成蓦* @版权所有http://blog.chacuo.net * @ param $ src原始字符串* @返回字符串base64 string * */函数c _ base64 _ encode ($ src)可以任意修改。{ static $ base=' abcdefghijklmnopqrstuvwxyzabbcdefghijklmnopqrstuvwxyz 0123456789/';////将原来的3字节转换为4字节$ slen=strlen($ src);$ smod=($ slen % 3);$ snum=floor(slen/3);$ desc=array();for($ I=0;$ i $ snum$i ){////读取3字节$ _ arr=array _ map(' order ',str _ split (substr ($ src,$ I * 3,3));///计算每个base64值$ _ dec0=$ _ arr[0]2;$ _ dec1=($ _ arr[0]3)4)|($ _ arr[1]4);$ _ dec 2=($ _ arr[1]0xF)2)|($ _ arr[2]6);$ _ dec 3=$ _ arr[2]63;$desc=array_merge($desc,array($base[$_dec0],$base[$_dec1],$base[$_dec2],$ base[$ _ dec3]);} if($ smod==0)return inquide(',$ desc);///计算非3倍字节$ _ arr=array _ map(' order ',str _ split (substr ($ src,$ snum * 3,3));$ _ dec 0=$ _ arr[0]2;///只有一个字节if(!isset($ _ arr[1]){ $ _ dec1=($ _ arr[0]3)4);$ _ dec2=$ _ dec3='=}else {///2字节$ _ dec1=($ _ arr[0]3)4)|($ _ arr[1]4);$ _ dec 2=$ base[($ _ arr[1]7)2];$ _ dec3='=}$desc=array_merge($desc,array($base[$_dec0],$base[$_dec1],$_dec2,$ _ dec3));返回内爆(',$ desc);}
好了,通过这个例子,我想我对base64编码和转换的原理和算法有了一些了解。它的转换过程非常简单,只需要制作一个映射表,然后做一些移位操作就完成了原来的!通过这个例子,我们能像base32一样自己编写代码吗?欢迎朋友交流!
版权声明:Base64编码简介 Base64编码转换原理及算法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。