什么是Base64
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,Base64并不是安全领域的加密算法,其实Base64只能算是一个编码算法,对数据内容进行编码来适合传输。标准Base64编码解码无需额外信息即完全可逆,即使你自己自定义字符集设计一种类Base64的编码方式用于数据加密,在多数场景下也较容易破解。Base64编码本质上是一种将二进制数据转成文本数据的方案。
对于非二进制数据,是先将其转换成二进制形式,然后每连续6比特(2的6次方=64)
计算其十进制值,根据该值在A–Z,a–z,0–9,+,/ 这64个字符中找到对应的字符,
最终得到一个文本字符串。基本规则如下几点:
-
标准Base64只有64个字符(英文大小写、数字和+、/)以及用作后缀等号;
-
Base64是把3个字节变成4个可打印字符,所以Base64编码后的字符串一定能被4整除(不算用作后缀的等号);
-
等号一定用作后缀,且数目一定是0个、1个或2个。这是因为如果原文长度不能被3整除,Base64要在后面添加\0凑齐3n位。为了正确还原,添加了几个\0就加上几个等号。显然添加等号的数目只能是0、1或2;
-
严格来说Base64不能算是一种加密,只能说是编码转换。。
Base64的编码多占用了1/3的字节长度,以此实现更好的兼容性
示例
import java.util.Base64;
public class Test01 {
public static void main(String[] args) {
//得到编码器
Base64.Encoder encoder = Base64.getEncoder();
String data = "罗罗诺亚";
//加密
byte[] bytes = encoder.encode(data.getBytes());
//源码已经弃用
//String encode = encoder.encodeToString(data.getBytes());
System.out.println(new String(bytes));
//得到解码器
Base64.Decoder decoder = Base64.getDecoder();
//解密
byte[] decode = decoder.decode(bytes);
System.out.println(new String(decode));
}
}
"C:\Program Files\Java\jdk1.8.0_144\bin\java.exe" "-javaagent:F:\MyDir\IDEA\IDEA2018\IntelliJ IDEA 2018.2.4\lib\idea_rt.jar=63699:F:\MyDir\IDEA\IDEA2018\IntelliJ IDEA 2018.2.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_144\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\rt.jar;E:\idea_workplace\javaBase\target\classes"
572X572X6K+65Lqa
罗罗诺亚
Process finished with exit code 0