base64编码
2018-06-24 01:22:47来源:未知 阅读 ()
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"这个字母是一个字节,可以转化为二组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。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- HTTP 冷知识 | HTTP 请求中,空格应该被编码为 %20 还是 + 2020-06-02
- HTML特殊字符编码对照表 2020-01-14
- 使用base64编码把背景添加到CSS文件中 2019-08-26
- post提交的数据有哪几种编码格式?能否通过URL参数获取用户 2018-12-13
- CSS编码规范 2018-09-29
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash