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 编码中没有意义。
我的供应商在 .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 编码中没有意义。