前言
Base64是什么?它和加解密操作有什么关系吗?我们看一下下边这段字符串:
aGVsbG8gd29ybGQ=
这就是经过Base64编码后的字符串,对它进行Base64解码,获得它原来的内容:
hello world
这有点加密解密的意味,不过Base64并不能称为加密算法,仅仅是加密算法的近亲,可以称之为可读性算法,它的目的不是保护我们的数据,主要是为了数据的可读性。
Base64算法的转换方式很像古典加密算法中的单表置换算法。接下来,我们来了解一下这种常用于电子邮件的算法。
1. Base64简介
1.1 Base64的由来
Base64算法最早应用于解决电子邮件传输的问题。早期,由于“历史问题”,电子邮件只允许ASCII码字符。如果要传输一封带有非ASCII码字符串的电子邮件,当它通过有“历史问题”的网关是就可能出现问题。
这个网关很可能会对这个非ASCII码字符的二进制位做调整,即将这个非ASCII码的8位二进制码的最高位置为0。此时,用户收到的邮件将会是一封纯粹的乱码邮件,基于这个原因就产生了Base64算法。
1.2 Base64算法的定义
Base64是一种基于64个字符的编码算法。
根据RFC2045的定义:“Base64内容传送编码是一种以任意8位字节序列组合的描述形式,这种形式不易被人直接识别。”
经过Base64编码后的数据会比原始数据略长,为原来的4/3倍。经过Base64编码后的字符串的字符数是以4为单位的整数倍。
RFC2045文件中给出的字符映射表:
注释:
- Value:十进制编码
- Encoding:字符
- 共映射了64个字符,即Base64算法命名的由来。
- 映射表最后一个字符是等号,用于补位。
Base64编码后的字符串只包含上述字符,是可以在网络上安全传输的,哪怕你的源数据是文本,再无需担心因为控制字符的混淆而丢失数据。
Base64解码是将可打印的ASCII字符转换为二进制数据,并放在byte数组中。而byte数组中的内容是一串不可见的二进制数据。Base64编码的核心作用不在于安全性,而在于让内容能够在各