代码之家  ›  专栏  ›  技术社区  ›  Pankaj Singhal

base64 url安全删除=

  •  3
  • Pankaj Singhal  · 技术社区  · 7 年前

    以下代码(使用commons codec 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= . 为什么会这样?

    1 回复  |  直到 7 年前
        1
  •  15
  •   Jon Skeet    7 年前

    为什么会这样?

    因为就是这样 documented 要执行的操作:

    注意:未添加填充。

    这个 = base64字符串末尾的字符称为padding。它们用于确保最终字符串的长度是4个字符的倍数,但从信息论的角度来看,它们并不是必需的,因此,只要使用不需要填充的方法将数据转换回二进制,就可以删除它们。Apache编解码器 Base64 类声明它透明地处理常规和URL安全的base64,因此 处理填充物不足的问题。

    推荐文章