目录
前言
一、什么是Base64编码?
二、Base64编码的原理
三、Base64编码的应用场景
四、为什么要使用Base 64
五、Base64加密解密的实现
前言
当你需要将二进制数据转换为可传输和存储的文本格式时,Base64编码是一个常用的选择。在这篇博客中,我们将详细介绍Base64编码的原理、实现以及如何进行加密和解密。
一、什么是Base64编码?
Base64编码是一种将二进制数据转换为纯文本字符的编码方式。它由64个字符组成,包括大小写字母、数字和两个特殊字符。Base64编码的主要目的是使二进制数据能够在不损失信息的情况下通过文本协议进行传输和存储。
二、Base64编码的原理
Base64编码的原理非常简单:将三个8位字节(即24位)划分为四个6位字节,并将每个6位字节映射到一个Base64字符。如果原始数据不能被3整除,会在末尾添加一些额外的位来填充。
Base64字符表如下所示:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
使用该字符表,可以将每个6位字节映射到一个字符。例如,二进制数 010110 011011 001001
可以被转换为 S2l
。
三、Base64编码的应用场景
-
电子邮件附件:电子邮件通常只能传输文本数据,无法直接传输二进制附件(例如图片、音频、视频文件)。通过使用Base64编码,可以将二进制附件转换为纯文本格式,然后作为邮件正文的一部分进行传输。
-
URL参数传递:在URL中包含特殊字符(例如空格、加号、斜杠等)会导致解析问题。通过使用Base64编码,可以将参数数据转换为一系列安全的文本字符,以便在URL中传递。
-
数据存储:在某些情况下,我们希望将二进制数据存储为可读的文本格式,例如在数据库或文本文件中。Base64编码提供了一种简单而有效的方式来实现这一目标。
-
加密算法:在某些加密算法中,加密后的数据可能包含不可打印的字符或特殊字符。通过使用Base64编码,可以将加密后的数据转换为纯文本格式,以便于传输或存储。
四、为什么要使用Base 64
Base 64主要用途不是加密,而是把一些二进制数转成普通字符,方便在网络上传输。 由于一些二进制字符在传输协议中属于控制字符,不能直接传送,所以需要转换一下才可以。
由于某些系统中只能使用ASCII字符,Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法,Base64特别适合在http,mime协议下快速传输数据。比如网络中图片的传输。
Base64,并非安全领域下的加密解密算法。虽然经常遇到所谓的base64的加密解密。但base64只能算是一个编码算法,对数据内容进行编码来适合传输。虽然base64编码过后原文也变成不能看到的字符格式,但是方式初级又简单。
五、Base64加密解密的实现
package com.ctb.demo;
import java.util.Base64;
import java.util.Base64.Decoder;
import java.util.Base64.Encoder;
/**
*
*
* @author biao
*
* 2024年6月15日
*/
public class Base64Demo {
//base64 解码
public static String decode(byte[] bytes) {
Decoder decoder = Base64.getDecoder();
byte[] decode = decoder.decode(bytes);
return new String((decode));
}
//base64 编码
public static String encode(byte[] bytes) {
Encoder encoder = Base64.getEncoder();
String encode = encoder.encodeToString(bytes);
return new String(encode);
}
public static void main(String[] args) {
String string = "青龙偃月刀";
//编码
String encode = encode(string.getBytes());
System.out.println(string + "\t编码后的字符串为:" + encode);
//解码
String decode = decode(encode.getBytes());
System.out.println(encode + "\t字符串解码后为:" + decode);
}
}
结果: