摘要:我们来讨论一些编码加密方面的知识,Base64这是一种用64个字符来表示任意二进制数据的方法。可以用他在把图片、文本等使用简单字体进行编码,能直接用文本编辑器打开,也便于传输。
定义
Base64是一种用64个字符来表示任意二进制数据的方法。
场景
Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME的email,email via MIME, 在XML中存储复杂数据。
特点
- Base64是一种通过查表的编码方法,不能用于加密,即使使用自定义的编码表也不行。
-
Base64适用于小段内容的编码,比如数字证书签名、Cookie的内容等。
原理
Base64是一种基于64个可打印字符来表示二进制数据的表示方法,其中的64个可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。常用的是+
、/
两个符号,=
来作为后缀用途。
我们来看看他的计算方式:
如上图所示:
- 每三个8Bit的字节转换为四个6Bit的字节(3_8 = 4_6 = 24)
- 然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。
- 我们把这4个数据查表可以得到编码后的4个字符
转超过3字节的串还要注意什么?
- 每76个字符加一个换行符
- 最后的结束符也要处理
- 如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?Base64用\x00字节在末尾补足后,再在编码的末尾加上1个或2个
=
号,表示补了多少字节,解码的时候,会自动去掉。
ps:如果是自动去掉=
的编码,在解码的时候要自己加上,在末尾补足=
号。
作为url传输
标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的/
和+
做urlcode编码,这样就出现了问题,为解决此问题,可采用一种用于URL的改进Base64编码,它在末尾填充'='号,并将标准Base64中的+
和/
分别改成了-
和_
另有一种用于正则表达式的改进Base64变种,它将+
和/
改成了!
和-
,因为他们在正则里有自己的含义。
加密原理
对原字符串前后加一些东西,然后再进行Base64编码,已知的比如迅雷在地址的前后分别添加AA和ZZ;Flashget在地址前后加的是[FLASHGET]
引用
base64 wiki 廖雪峰的官方网站公众号
扫码订阅最新深度技术文,回复【资源】获取技术大礼包
评论