Base64 解码错误 最后一个单元没有足够的有效位

Sat*_*ian 7 java base64 x509certificate

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

openssl pkcs7 -inform DER -outform PEM -in in.p7b -print_certs > cer_bundle.cer
Run Code Online (Sandbox Code Playgroud)

我打开一看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
...
Run Code Online (Sandbox Code Playgroud)

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

CERT=MIIFDj...
base64 --decode <<< $CERT
Run Code Online (Sandbox Code Playgroud)

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

java的Base64解码器是怎么回事?

小智 7

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

  • 对于一个“余数”字节,尾随的四个字符是编码六位和编码两位XY==的地方。XY
  • 对于两个“剩余”字节,尾部四个字符XYZ=编码X六位,Y编码第一字节的两位和第二字节的四位,同时Z编码第二字节的四位。

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