如何检查字节数组是否为Base64编码?

6

如何检查字节数组是否为Base64编码?

我有一个字节数组,需要测试它是否是Base64编码的。


1
你知道未编码的字节数组应该包含什么吗?唯一的检查方法是对其进行解码,看是否能恢复出最初的内容。 - Steve Smith
你无法区分看起来像Base64的东西和实际上是Base64的东西。你需要跟踪元数据以确保。 - Durandal
2个回答

10
您可以使用Apache的Base64.isBase64(byte[])方法:
import org.apache.commons.codec.binary.Base64;

...

boolean isBase64 = Base64.isBase64(bytes);

1

Base64编码的字符串长度可被4整除,并由字符A-Za-z0-9+/组成。如果您的字节数组长度不可被4整除,或包含映射到这些范围之外的字符,则它不代表一个Base64编码的字符串;否则,您的字节数组表示一个有效的Base64编码字符串。


这仅适用于由String.getBytes(encoding)生成的字节数组,对吗?而且,我们不知道使用了哪种编码。所以我会说不清楚OP想要什么。 - Andremoniy
1
@Andremoniy,你对 String.getBytes 的假设是正确的,也就是正确的编码假设。我认为OP想要什么是很清楚的,但是OP拥有什么却不清楚 :-) - Sergey Kalinichenko
Base64不是一个单一的标准编码。有多个方言(部分兼容)。例如,在许多情况下,填充是可选的。还有不止一种可能的字母表:https://en.wikipedia.org/wiki/Base64 - Durandal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接