java - 使用不同 Base64 库时数据不匹配

标签 java

当前通过 org.apache.commons.codec.binary.Base64 库使用 Base64 转换。这是作为我们拥有的一些旧代币的一部分实现的,效果很好。我们目前正在尝试放弃这个库,并坚持在 utils 下使用 Java 8 内置的 Base64 库。但这不起作用,因为字符不匹配,如下所示。有没有办法解决这个问题(除了使用我绝对不想搞乱的正则表达式)?请指教。谢谢。

String value1 = org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString(aByteArray);
String value2 = java.util.Base64.getEncoder().encodeToString(aByteArray);

使用 org.apache.commons.codec.binary.Base64 库时的示例结果。

1111111111_22222_Some // value1

使用 java.util.Base64 库时的示例结果。

1111111111/22222/Some= // value2 

请注意/和 _ 加上缺少 = 符号之间的区别。在不同的标记中,您会看到差异,例如 + 符号与 - 符号等。

我尝试了不填充和设置 StandardCharsets.UTF_8 来传递字节数组的选项,最终得到相同的不匹配结果。

最佳答案

org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString(aByteArray); 创建一个 URL 安全的 Base64 变体。 (使用 _ 和 - 作为编码的一部分)

使用java.util.Base64.getEncoder().encodeToString(aByteArray);将创建“标准”base64,其中“/”“=”和“+”作为编码的一部分。这将是不安全的网址。

Base64 类有一个不同的编码器 (Base64.getUrlEncoder()),用于 url 安全编码变体:

java.util.Base64.getUrlEncoder().encodeToString(aByteArray) 

编辑:

删除可以使用的可选填充

java.util.Base64.getUrlEncoder().withoutPadding().encodeToString(aByteArray);

关于java - 使用不同 Base64 库时数据不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62373593/

相关文章:

Java-使滚动 Pane 的大小更改为表格的大小?

java - for 循环是导致此代码中错误的原因吗?

java - Hibernate注释: Many-to-many with shared composite key attribute

java - 每个输入多次打印。为什么?

java - 为什么在 JAVA 中 session.invalidate() 之后 session 不为空?

java - 如何获取firebase中child的child列表?

java - 如何在初始化时定义 map 内容?

java - 泽西日志记录功能 : in web. xml

java - ArrayList 重复元素出现在 ListView 中

java - SimpleOpenNI 记录和回放用户跟踪数据