Base64 解码错误 Last unit does not have enough valid bits

Base64 decode error Last unit does not have enough valid bits

我的供应商在 .p7b 文件中发送给我的证书。我需要从中提取证书。所以我 运行 在我的 cmd:

openssl pkcs7 -inform DER -outform PEM -in in.p7b -print_certs > cer_bundle.cer

我打开 cer_bundle.cer 并看到三个证书。前两个看起来不错。通过 Base64.getDecoder().decode(myCert) 提交的最终证书会引发如下错误:

java.lang.IllegalArgumentException: Last unit does not have enough valid bits\n\tat 
java.util.Base64$Decoder.decode0(Base64.java:734)\n\tat 
java.util.Base64$Decoder.decode(Base64.java:526)\n\tat 
java.util.Base64$Decoder.decode(Base64.java:549)\n\t
...

然后我获取证书的内容并在我的终端上执行此操作

CERT=MIIFDj...
base64 --decode <<< $CERT

并且我在控制台上看到没有错误的输出。

java 的 Base64 解码器发生了什么?

Base 64编码使用四个字符编码三个字节,所以长度应该是四个字符的倍数。如果输入是三个字节的倍数,则不需要填充,否则将添加 =。会有一两个“剩余”字节。

  • 对于一个“剩余”字节,尾随的四个字符是 XY==,其中 X 编码六位,Y 编码两位。
  • 对于两个“剩余”字节,尾随的四个字符是 XYZ=,其中 X 编码六位,Y 编码第一字节的两位和第二字节的四位而 Z 编码第二个字节的四位。

你得到的错误表明最后四个字符本质上是 X==== 可以省略)这在 base 64 编码中没有意义。