base64编码

Base64 is a group of similar binary-to-text encoding schemes that represent binary data in an ASCII string format by translating it into a radix-64 representation. 
Base64是一种用64个可打印字符来表示任意二进制数据的方法,不能用于加密。
为何使用Base64格式编码?
在只支持纯文本的协议中须要保存非字符类数据(url(data:image/png;base64,iVBORw0KGgo…;)),或在只支持ASCII字符的系统中保存非ASCII字符的数据时,能够将数据的二进制形式编码成Base64形式保存。
ASCII码的128~255之间的值是不可见字符,在纯文本协议的传输过程当中可能会被错误看成控制字符处理引发传输失败。所有编码成可见字符,下降出错的可能性。
Base64的编码转换方式
将每三个字节分为一组,一共是24 bit。
将这24个二进制位分为四组,每一个组有6个二进制位。
在每组前面固定先加00,这样每组仍是8 bit,有效位是每组的低6位。即原来3个字节扩展成32个二进制位四字节。(每组最高值为63)
而后查表获得编码后的字符串。Base64将三个字节转化成四个字节,编码后的文本会比原文多三分之一。
Base64编码表
码值
字符
 
 
码值
字符
 
码值
字符
 
码值
字符
0
A
 
26
a
52
0
62
+


 




63
/
 编码实例:
source ASCII (if <128) M a n source octets 77 (0x4d) 97 (0x61) 110 (0x6e) Bit pattern 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0 Index 19 22 5 46 Base64-encoded T W F u Unicode Point 84 (0x54) 87 (0x57) 70 (0x46) 117 (0x75)   str.charCodeAt() 方法可返回指定位置的字符的 Unicode 编码,返回值是 0 - 65535 之间的整数。String.fromCharCode(code)方法将编码转为对应的字符。
若是要编码的二进制数据不是3的倍数,分组后后会剩下1个或2个字节。Base64用x00在末尾补足一组后,再在编码的末尾加上1个或2个=号,表示为了凑成一组补了多少字节。 
多一个字节时:先在该字节以后添加2个x00字节组成一组,再按照上面的规则转换成base64码的4字节。每一个字节前面2位固定为0,最后在Base64编码的末尾补上两个"="号,表示补了2个字节。
好比,"M"这个字母是一个字节,能够转化为二组000100十一、00010000,对应的Base64值分别为T、Q,再补上二个"="号,所以"M"的Base64编码就是TQ==。
Text content M  添加x00补足一组  添加x00补足一组 ASCII 77 (0x4d) 0 (0x00) 0 (0x00) Bit pattern 0 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Index 19 16 0 0 Base64-encoded T Q = = 多二个字节时:先在这两个字节以后添加1个x00组成一组,再按照上面的规则转换成base64的4字节,最后在末尾补上一个"="号。
好比,"Ma"这个字符串是两个字节,能够转化成三组000100十一、000101十、00000100之后,对应Base64值分别为T、W、E,再补上一个"="号,所以"Ma"的Base64编码就是TWE=。 
Text content M a   ASCII 77 (0x4d) 97 (0x61) 0 (0x00) Bit pattern 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 Index 19 22 4 0 Base64-encoded T W E = 中文用Base64编码
先要得到二进制数据,再根据上述规则转换。不一样的中文编码方式对应的二进制不一样,全部若是不统一容易出现乱码。
"严"的utf-8编码为3字节E4B8A5,写成二进制就是三字节的"11100100 10111000 10100101",而后转换成Base64值就是5Lil。
转载于猿2048:➻《base64编码》php

相关文章
相关标签/搜索