java.util和apach-commons中不同的base64编码验证

问题描述 投票:0回答:1

让我们考虑以下代码库:

val str = "contextId"
println (org.apache.commons.codec.binary.Base64.isBase64(str))
String(java.util.Base64.getDecoder().decode(str))

打印出来了

true
Exception in thread "main" java.lang.IllegalArgumentException: Last unit does not have enough valid bits
    at java.base/java.util.Base64$Decoder.decode0(Base64.java:867)
    at java.base/java.util.Base64$Decoder.decode(Base64.java:566)
    at java.base/java.util.Base64$Decoder.decode(Base64.java:589)
     ...

对我来说这看起来很矛盾。

您能解释一下这种行为吗?

java kotlin base64 apache-commons
1个回答
1
投票

isBase64
的文档说明(强调我的)

测试给定字符串以查看它是否仅包含 Base64 字母表中的有效字符

它没有说明字符串可以被解码或具有适当的长度。因此它返回

true

另一方面,

java.util.Base64.getDecoder().decode(str)
实际上尝试解码字符串,但失败了,因为字符串没有合适的长度。

© www.soinside.com 2019 - 2024. All rights reserved.