1. Base64工具
工具链接
2. Base64示例代码
public class Base64Demo {
// 请注意,在处理二进制数据时(例如图片或文件),不需要将字节数组转换为字符串再进行编码或解码,
// 可以直接对字节数组进行Base64操作。上述示例中的字符串是为了简化演示而使用的。
public static void main(String[] args) {
// 编码
enCode();
// 解码
deCode();
}
private static void enCode() {
// 待编码的字符串
String originalString = "Hello, World!";
// 使用默认的Base64.Encoder进行编码
byte[] encodedBytes = Base64.getEncoder().encode(originalString.getBytes(StandardCharsets.UTF_8));
// 输出编码后的Base64字符串
System.out.println("Base64 Encoded String: " + new String(encodedBytes, StandardCharsets.UTF_8));
}
private static void deCode() {
// 已经编码的Base64字符串
String encodedString = "SGVsbG8sIFdvcmxkIQ==";
// 将Base64字符串转换成字节数组
byte[] encodedBytes = encodedString.getBytes(StandardCharsets.UTF_8);
// 使用Base64.Decoder进行解码
byte[] decodedBytes = Base64.getDecoder().decode(encodedBytes);
// 将解码后的字节数组转换回字符串
String originalString = new String(decodedBytes, StandardCharsets.UTF_8);
// 输出解码后的原始字符串
System.out.println("Decoded Original String: " + originalString);
}
}
下面内容为引用
3. 了解Base64
-
Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法(并不是encode后的文本字符大小是64个)
-
将 byte数组编码为字符串的方法,而且编码出的字符串只包含ASCII基础字符。
-
例如字符串ShuSheng007对应的Base64为U2h1U2hlbmcwMDc=。其中那个=比较特殊,是填充符,不属于64个字符中在编码后的Base64文本后加上一个或两个 = 号,代表补足的字节数。
-
值得注意的是Base64不是加密算法,其仅仅是一种编码方式,算法也是公开的,所以不能依赖它进行加密。
4. Base64使用到的64个字符:
- A-Z 26个
- a-z 26个
- 0-9 10个
- + 1个
- / 1个
下图是Base64码表,可以看到从0到63的每个数字都对应一个上面的一个字符。
5. Base64 编码的优点
- 算法是编码,不是压缩,编码后只会增加字节数(一般是比之前的多1/3,比如之前是3, 编码后是4)
- 算法简单,基本不影响效率
- 算法可逆,解码很方便,不用于私密传输。
- 毕竟编码了,肉眼不能直接读出原始内容。
- 加密后的字符串只有【0-9a-zA-Z+/=】 不可打印字符(转译字符)也可以传输
6. Base64就是为了解决各系统以及传输协议中二进制不兼容的问题而生的
因为Base64的64个字符和= 以及它表示的二进制在哪都通用
7. Base64 DataURI格式
有时你会发现web页面传给你的base64字符串前面有类似下面的东东。
data:image/jpeg;base64, /9j/4AA…
这是DataURI,大部分浏览器支持直接打开这类二进制数据,但是我们要格外注意,
如果你只是想要真实的Base64内容就需要取,后边的内容
8. Base64用途
- 对于证书来说,尤其是根证书,一般是 base64 编码的,在网上被很多人下载
- 电子邮件的附件一般是 base64 编码,因为附件往往有不可见字符
- xml 中如果像嵌入另外一个 xml 文件,直接嵌入,往往 xml 标签就乱套了, 不容易解析,因此,需要把 xml 编译成字节数组的字符串,编译成可见字符。
- 网页中的一些小图片,可以直接以 base64 编码的方式嵌入,不用再链接请求消耗网络资源。
外一个 xml 文件,直接嵌入,往往 xml 标签就乱套了, 不容易解析,因此,需要把 xml 编译成字节数组的字符串,编译成可见字符。 - 网页中的一些小图片,可以直接以 base64 编码的方式嵌入,不用再链接请求消耗网络资源。
- 较老的纯文本协议 SMTP ,这些文本偶尔传输一个文件时,需要用 base64