1. Base64 加密算法
1.1 标准 Base64 算法
【计算机|Java 实现 Base64 加密&解密方法】Base64 编码是程序开发中比较常用的一种编码算法,是常用来存储或传输一些二进制数据的方法,也是 MIME(多用途互联网邮件扩展)中的一种编码方法 。
Base64 可以实现将任何数据转换为可打印字符表示的字符串,避免数据在传输过程中失真,Base64 最开始用来在邮件发送中将非 ASCLL 字符内容转换为 ASCLL字符。
标准 Base64 是一种用于传输 8Bit 字节码的编码方式之一,基于 64 个可打印字符来表示二进制数据,使用的可打印字符包括有:A-Z、a-z、0-9、+、/ 共 64 个。
1.2 非标准 Base64 算法
UrlBase64
标准 Base64 算法中使用了 + 和 / 字符,这与 URL 以及文件系统中存在冲突,因此延伸出了一种 UrlBase64 算法,该算法中将标准 Base64 的 + 和 / 替换成为了 - 和 _ 字符。
MIME Base64
MIME Base64 算法是一种更加友好的编码格式,其定义了每行只能输出 76 个字符,如果长度超出 76,会进行换行并在行末尾增加换行符号 \r\n
, 最后一行字符长度即时不足 76,也同样会增加回车换行符号。
3. Java 实现 Base64 加解密
3.1 apache.commons-codex 包
apache.commons-codex 包中提供了的 Base64 等许多编码格式转换,可以通过其进行实现。
import org.apache.commons.codec.binary.Base64; public class Base64Util {//base64 编码 public static String encode(byte[] bytes) { return new String(Base64.encodeBase64(bytes)); }//base64 解码 public static String decode(byte[] bytes) { return new String(Base64.decodeBase64(bytes)); }public static void main(String[] args) { String string = "test1234"; //编码 String encode = encode(string.getBytes()); System.out.println(string + "\t编码后的字符串为:" + encode); //解码 String decode = decode(encode.getBytes()); System.out.println(encode + "\t字符串解码后为:" + decode); } } 复制代码
3.2 Java8 中的 Base64
Java8 之后,JDK 工具包中提供了 Base64 特性,可以直接使用来完成编码和解码操作。
import java.nio.charset.StandardCharsets; import java.util.Base64; public class Base64Util {final static Base64.Encoder encoder = Base64.getEncoder(); final static Base64.Decoder decoder = Base64.getDecoder(); public static String encode(String text) { return encoder.encodeToString(text.getBytes(StandardCharsets.UTF_8)); }public static String decode(String encodedText) { return new String(decoder.decode(encodedText), StandardCharsets.UTF_8); }public static void main(String[] args) { String str = "test1234"; System.out.println("编码后的字符串为:"); System.out.println(Base64Util.encode(str)); System.out.println("解码后的字符串为:"); System.out.println(Base64Util.decode(Base64Util.encode(str))); } } 复制代码
- 使用 UTF-8 指定编码和解码格式,保证操作过程中不会出现中文乱码问题,如果不指定编码格式 Base64 会使用环境默认编码格式。
- windows 下默认为 GBK 编码,而 Linux 下默认为 utf-8 编码,因此在编码和解码时指定统一的编码格式是良好的编程习惯。
Java8 的 Base64 包中同时提供了非标准 Base64 的编码方法
UrlBase64
- Base64.getUrlEncoder()
- Base64.getUrlDecoder()
- Base64.getMimeEncoder()
- Base64.getMimeDecoder()
Java 对图片编码得到 Base64 字符串
public static String GetImageStr(String imgFilePath) { // 将图片文件转化为字节数组字符串,并进行 Base64 编码处理 byte[] data = https://www.it610.com/article/null; // 读取图片字节数组 try { InputStream in = new FileInputStream(imgFilePath); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); }// 对字节数组Base64编码 BASE64Encoder encoder = new BASE64Encoder(); // 返回字节数组的 Base64 编码字符串 return encoder.encode(data); } 复制代码
- 如果需要将得到的 base64 字符串展示在 html 的 img 标签中,需要在字符串中添加
data:image/jpg; base64,
前缀
文章图片
复制代码
4.2 Base64 字符串转图片
对于标准的 Base64 字符串,还可以直接使用 Base64 解码方法转成图片文件,但是如果是 img 标签中的字符串,需要去掉特定的前缀后再转成图片,否则图片无法打开。
public static void base642Image(String imgData) { // Base64 字符串判空 if (imgData =https://www.it610.com/article/= null) { return ; }String imgFilePath ="C:\\Desktop\\temp\\test.jpeg"; BASE64Decoder decoder = new BASE64Decoder(); OutputStream out = null; try { out = new FileOutputStream(imgFilePath); byte[] bytes = decoder.decodeBuffer(imgData); for (int i = 0; i < bytes.length; ++i) { if (bytes[i] < 0) { bytes[i] += 256; } } out.write(bytes); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } 复制代码
推荐阅读
- 计算机|使用Spring Boot和JPA创建GraphQL API
- Java|40 个 SpringBoot 常用注解(让生产力爆表)
- 面试|3年原地踏步的程序员,想要进大厂拿25K(挺到三面就直接砍了...)
- C++|C++ 基础与深度分析 Chapter11 类与面向对象编程(构造函数(缺省、单一、拷贝、移动、赋值))
- 每天几个面试题|token过期?页面如何实现无感刷新?
- SSM框架基于JavaWeb在线投票系统的设计与实现源码+论文+ppt+代码讲解视频+安装视频(包安装)
- 网络|音视频技术开发周刊 | 224
- 性能优化|Android 项目架构系列之代码的混淆
- jar|Android logfilter抓log