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

Java Base64解码错误最后一个单元没有足够的有效位,java,base64,x509certificate,Java,Base64,X509certificate,我有一份由我的供应商以.p7b文件形式发送给我的证书。我需要从中提取证书。所以我在我的cmd上运行这个: openssl pkcs7 -inform DER -outform PEM -in in.p7b -print_certs > cer_bundle.cer 我打开cer_bundle.cer,看到三个证书。前两个看起来不错。通过Base64.getDecoder.decodemyCert时,最终证书会抛出如下错误: java.lang.IllegalArgumentExcepti

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

openssl pkcs7 -inform DER -outform PEM -in in.p7b -print_certs > cer_bundle.cer
我打开cer_bundle.cer,看到三个证书。前两个看起来不错。通过Base64.getDecoder.decodemyCert时,最终证书会抛出如下错误:

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解码器中发生了什么?

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

对于一个余数字节,后面的四个字符是XY==其中X编码六位,Y编码两位。 对于两个剩余字节,尾随的四个字符是XYZ=其中X编码六位,Y编码第一个字节的两位和第二个字节的四位,而Z编码第二个字节的四位。
获取的错误表明,最后四个字符本质上是X===可能会忽略,这在base 64编码中没有意义。

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

对于一个余数字节,后面的四个字符是XY==其中X编码六位,Y编码两位。 对于两个剩余字节,尾随的四个字符是XYZ=其中X编码六位,Y编码第一个字节的两位和第二个字节的四位,而Z编码第二个字节的四位。
获取的错误表明,最后四个字符本质上是X===可能会省略,这在base64编码中没有任何意义。

您可以共享base64编码数据的最后几个可能8个字符吗?@Erik here u go:wt35Lcw=您可以共享base64编码数据的最后几个可能8个字符吗?@Erik here u go:wt35Lcw=我进行了彻底的逐字母检查,结果发现在删除新行时遗漏了一个字符-难怪要解码的位更少我进行了彻底的逐字母检查,结果在删除新行时遗漏了一个字符-难怪要解码的位更少