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



我的供应商在.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 bitsntat 
java.util.Base64$Decoder.decode0(Base64.java:734)ntat 
java.util.Base64$Decoder.decode(Base64.java:526)ntat 
java.util.Base64$Decoder.decode(Base64.java:549)nt
...

然后我把证书的内容放在我的终端上

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

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

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

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

  • 用一个";余数";字节,后面的四个字符是XY==,其中X编码六个比特,Y编码两个比特
  • 用两个";余数";后面四个字符的字节是XYZ=,其中X编码六位,Y编码第一个字节的两位和第二个字节的四位,而Z编码第二个比特的四位

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

相关内容

  • 没有找到相关文章

最新更新