base64 编码的字符串:可以在 PHP 中解码但不能在 Java 中解码?

base64 encoded string: can be decoded in PHP but not Java?

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);

这抛出:

"Input byte array has wrong 4-byte ending unit" java.lang.IllegalArgumentException.

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

demo输入错误padded;它应该以 == 而不是 =.

结尾

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

或者,由于填充在 Base64 中是可选的,您可以在使用 java.util.Base64.

解码之前去除任何尾随 = 字符