码迷,mamicode.com
首页 > 其他好文 > 详细

base64编码

时间:2017-05-26 23:37:42      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:orm   idt   统一   represent   不能   group   多少   for   字节   

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,…)),或在只支持ASCII字符的系统中保存非ASCII字符的数据时,可以将数据的二进制形式编码成Base64形式保存。

ASCII码的128~255之间的值是不可见字符,在纯文本协议的传输过程中可能会被错误当作控制字符处理引起传输失败。全部编码成可见字符,降低出错的可能性。

Base64的编码转换方式

  1. 将每三个字节分为一组,一共是24 bit。
  2. 将这24个二进制位分为四组,每个组有6个二进制位。
  3. 在每组前面固定先加00,这样每组还是8 bit,有效位是每组的低6位。即原来3个字节扩展成32个二进制位四字节。(每组最高值为63)
  4. 然后查表得到编码后的字符串。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
encoded octets 84 (0x54) 87 (0x57) 70 (0x46) 117 (0x75)

如果要编码的二进制数据不是3的倍数,分组后后会剩下1个或2个字节。Base64用\x00在末尾补足一组后,再在编码的末尾加上1个或2个=号,表示为了凑成一组补了多少字节。 

多一个字节时:先在该字节之后添加2个\x00字节组成一组,再按照上面的规则转换成base64码的4字节。每个字节前面2位固定为0,最后在Base64编码的末尾补上两个"="号,表示补了2个字节。

比如,"M"这个字母是一个字节,可以转化为二组00010011、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"这个字符串是两个字节,可以转化成三组00010011、00010110、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。

base64编码

标签:orm   idt   统一   represent   不能   group   多少   for   字节   

原文地址:http://www.cnblogs.com/kevin2chen/p/6910621.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!