Java 密码系列 - Java 和 JS Base 64
Base 64 不属于密码技术,仅是编码方式。但由于在 Java、JavaScript、区块链等出现的频率较高,故在本系列文章中首先分享 Base 64 编码技术。前面部分主要介绍 Base 64 理论性的内容,如果只看在 Java(SpringBoot)或 JS(Vue)中的实现,可以直接跳到最后。
本文所有代码可在 github 上获取:
- 后端代码搜索
hero-springboot-demo
;- 前端代码搜索
hero-vue3-demo
。
1 Base 64 介绍
要说清楚 Base 64 编码,首先得从 byte 开始说。
1.1 关于byte
在 Java 中,byte 是 8 种基本数据类型之一。byte 类型表示字节,一个字节由 8 个 bit (比特/位)组成。每个 bit 位表示一个二进制,即 0 或 1。在操作系统中,byte 是数据存储的基本单位,如描述硬盘的大小是 512 MB,其基本单位就是 byte。
- bit:比特、位,每个 bit 不是 0 就是 1;
- byte:字节,数据存储的基本单位;
- 1 byte = 8 bit
在 Java 中可以通过 getBytes(StandardCharsets.UTF_8)
方法获取字符串的 byte 数组。
@Test
public void testStrBytes() {
String str = "a";
byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
for (byte b : bytes) {
System.out.println(b); // 97
System.out.println(Integer.toBinaryString(b)); // 1100001
}
}
字符 a
的 ASCII 码是 97,通过 Integer.toBinaryString(b)
方法,获取字节对应的 bit 字符串。二进制 1100001 对