【问题标题】:base64 encoded string: can be decoded in PHP but not Java?base64 编码字符串:可以用 PHP 解码,但不能用 Java 解码?
【发布时间】:2021-04-19 19:11:56
【问题描述】:

有效的 PHP 代码:

$str = "528ABf4cCU5g7zKzLC2t8oze4mstEcWKErar6FbTK2Xo97bu17S8cDmEg5HlbgcLtfvKCVvJ4FnRV3R1iX1TWZIyM7T2352wsb6LUyqFXA03Fz9G6dQmhRrkWpOXAoHeU/H63LKKzcJDhNb3YI2hfsU20BcT0qkk74XKneC7D91OKY=";
echo strlen(base64_decode($str));

输出 130。

不工作的Java代码:

String demo = "528ABf4cCU5g7zKzLC2t8oze4mstEcWKErar6FbTK2Xo97bu17S8cDmEg5HlbgcLtfvKCVvJ4FnRV3R1iX1TWZIyM7T2352wsb6LUyqFXA03Fz9G6dQmhRrkWpOXAoHeU/H63LKKzcJDhNb3YI2hfsU20BcT0qkk74XKneC7D91OKY=";
System.out.println(java.util.Base64.getDecoder().decode(demo).length);

这会抛出:

“输入字节数组的 4 字节结束单元错误”java.lang.IllegalArgumentException。

如何让 PHP 喜欢的 base64 编码字符串可以被 Java 解码?

【问题讨论】:

    标签: java php base64


    【解决方案1】:

    那个demo输入错误padded;它应该以== 而不是= 结尾。

    您可以使用更宽松的解码器,例如 Guava 的 BaseEncoding

    另外,由于在 Base64 中填充是可选的,您可以在使用 java.util.Base64 解码之前去除任何尾随 = 字符。

    【讨论】:

      猜你喜欢
      • 2021-10-26
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2012-12-05
      • 2012-11-13
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多