什么是base64加密方式?

小熊 网络安全评论9,0821字数 973阅读3分14秒阅读模式

摘要:我们来讨论一些编码加密方面的知识,Base64这是一种用64个字符来表示任意二进制数据的方法。可以用他在把图片、文本等使用简单字体进行编码,能直接用文本编辑器打开,也便于传输。

定义

Base64是一种用64个字符来表示任意二进制数据的方法。

场景

Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME的email,email via MIME, 在XML中存储复杂数据。

特点

  • Base64是一种通过查表的编码方法,不能用于加密,即使使用自定义的编码表也不行。

  • Base64适用于小段内容的编码,比如数字证书签名、Cookie的内容等。

原理

Base64是一种基于64个可打印字符来表示二进制数据的表示方法,其中的64个可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。常用的是+/两个符号,=来作为后缀用途。

我们来看看他的计算方式:

什么是base64加密方式?

如上图所示:

  1. 每三个8Bit的字节转换为四个6Bit的字节(3_8 = 4_6 = 24)
  2. 然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。
  3. 我们把这4个数据查表可以得到编码后的4个字符

转超过3字节的串还要注意什么?

  1. 每76个字符加一个换行符
  2. 最后的结束符也要处理
  3. 如果要编码的二进制数据不是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

廖雪峰的官方网站

weinxin
公众号
扫码订阅最新深度技术文,回复【资源】获取技术大礼包
小熊