3

以下代码(使用公共编解码器 Base64):

  byte[] a = Hex.decodeHex("9349c513ed080dab".toCharArray());
  System.out.println(Base64.encodeBase64URLSafeString(a));
  System.out.println(Base64.encodeBase64String(a));

给出以下输出:

k0nFE-0IDas         //should be k0nFE-0IDas=
k0nFE+0IDas=

Base64.encodeBase64URLSafeString(a)返回k0nFE-0IDas而不是k0nFE-0IDas=. 为什么会这样?

4

1 回答 1

15

为什么会这样?

因为这就是它记录要做的事情:

注意:没有添加填充。

=base64 字符串末尾的字符称为填充。它们用于确保最终字符串的长度是 4 个字符的倍数 - 但就信息论而言,它们并不是真正需要的,因此只要将数据转换回二进制,就可以合理地删除它们使用不需要填充的方法。Apache CodecBase64类声称它可以透明地处理常规和 URL 安全的 base64,因此大概可以处理缺少填充的问题。

于 2017-12-23T19:21:30.857 回答