简单来说,就是用6 bit代替原来的8 bit(一个字节)。
对"Man"编码为"TWFu":
ASCII码
标准ASCII码从0~127共128个字符。
其中0~31、127这33个字符称为控制字符
。如0为NUL
,表示空字符;1为SOH
,表示标题开始等。
其余95个称为可打印字符
。48为0
,也就是数字0;65表示A
,也就是大写字母A等。
BASE64
早期的一些传输协议只能传输可打印的ASCII码,但一个字节(8个bit)的可表示范围为0~255共256种,如果一个Byte的值超过127,那么就无法用ASCII码表示了。
此时BASE64应运而生。
BASE64算法只支持64个可打印字符
。包含大写字母A~Z
,小写字母a~z
,0~9
共62个,另外两个字符在不同的系统中有所区别,标准BASE64编码中为+
和/
。
因为一共只有64种字符,所以用6 bit足以表示所有的BASE64字符。
编码
BASE64用6 bit可以表示了原本的8 bit字符。但怎么用6 bit表示8 bit呢?增加字符的数量。6和8的最小公倍数是24,3 * 8 = 4 * 6。这样原来的3个字节可以用4个BASE64字符表示。也就是原来的3组拆成了4组来表示,每组转换成十进制,每个十进制对应一个BASE64字符。
将原来的3个Byte写成24 bit,按照高位到低位每6位组成一个BASE64字符,不足24位时末位补0。当没有匹配的8 bit字符的时候,用=
填充。
对"M"编码结果为"TQ==":
解码
与编码相反,只需要将对应4组6 bit分隔成3组8 bit,每组8 bit再表示成ASCII字符即可。
因此,BASE64算法只是一种编码算法,不能用于加密。
Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。