目前通过org.apache.commons.codec.binary.Base64库使用Base64转换。 这是作为我们拥有的一些较老的令牌生成的一部分实现的,运行良好。 我们目前正在尝试放弃这个库,坚持在UTILS下的build Base64库中使用Java 8的。 但是由于如下所示的字符不匹配,这不能工作。 有没有一种方法来克服这个问题(除了使用regex,我绝对不想弄乱它)? 请指教。 谢谢。
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
注意/和_之间的区别,加上缺少的=符号。 在不同的记号中,您会看到不同的符号,例如+符号,-sign等等。
我尝试了没有填充的选项,并为传递的字节数组设置StandardCharsets.utf_8,最终得到相同的不匹配结果。
org.apache.commons.codeC.binary.base64.EncodeBase64URLSafeString(aByteArray);
创建一个url安全的base64变体。 (将_和-作为编码的一部分)
使用java.util.base64.GetEncoder().EncodeToString(aByteArray);
将创建“标准”base64,其中“/”“=”和“+”作为编码的一部分。 那将不是url安全的。
Base64类对于url安全编码变体有一个不同的编码器(Base64.GetUrlenCoder()
):
java.util.Base64.getUrlEncoder().encodeToString(aByteArray)
编辑:
删除您可以使用的可选填充
java.util.Base64.getUrlEncoder().withoutPadding().encodeToString(aByteArray);