Base64 是编码:可读性降低不等于保密
把令牌或用户数据做 Base64 后放进 URL,不会让它成为秘密。任何拿到文本的人都可以执行反向解码。
问题从哪里出现
把令牌或用户数据做 Base64 后放进 URL,不会让它成为秘密。任何拿到文本的人都可以执行反向解码。
理解核心机制
Base64 把字节表示为文本,方便在某些协议中传输。标准、URL 安全和 MIME 变体有不同字符或换行规则。需要保密时使用经过设计的加密协议,需要防篡改则要单独考虑认证。
动手做一个小实验
Java 17 或更新版本;将示例保存为 Demo.java,执行 javac Demo.java 后运行 java Demo。
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Demo {
public static void main(String[] args) {
byte[] input = "hello".getBytes(StandardCharsets.UTF_8);
String text = Base64.getUrlEncoder().withoutPadding().encodeToString(input);
System.out.println(text);
System.out.println(new String(Base64.getUrlDecoder().decode(text), StandardCharsets.UTF_8));
}
}适用边界与常见误区
编码后长度通常增加,不能把它当作压缩。登录凭证也不应该因为“看不懂”就被放心写入日志。
继续练习
对不同长度字节数组进行往返编码,检查结果是否一致;再比较标准与 URL 安全变体的字符差别。