Java中两种Base64转换方式的差异及结果不同原因
两种Java Base64编码方式的差异原因解析
这两种编码结果的差异,核心在于你使用了两种不同的Base64编码器:
- 第一种调用的
Base64.getUrlEncoder()是URL安全的Base64编码器 - 第二种调用的
Base64.getEncoder()是标准Base64编码器
关键差异:字符替换规则
标准Base64编码会使用+和/这两个字符,但这两个字符在URL、Cookie等场景中属于特殊符号(+会被解析为空格,/是路径分隔符),直接使用会导致编码内容失效。因此URL安全的Base64做了针对性替换:
- 将标准Base64中的
+替换为- - 将标准Base64中的
/替换为_
两种编码器都会保留=作为填充字符,其余编码字符完全一致。
对应你的示例结果
对比你给出的两组编码结果:
第一种(URL安全编码器):
1HuW7rb7_l7NC7LwR7cRV2K-rlr7SnGdoEuGntxDKX8=
第二种(标准编码器):1HuW7rb7/l7NC7LwR7cRV2K+rlr7SnGdoEuGntxDKX8=
可以清晰看到:
- 第一种里的
_对应第二种里的/ - 第一种里的
-对应第二种里的+
其余字符完全匹配,完全符合上述替换规则。
内容的提问来源于stack exchange,提问作者Atul
相关产品推荐
相关产品推荐

