如何检查该字节数组是Base64编码的?

问题描述:

如何检查该字节数组是Base64编码的?如何检查该字节数组是Base64编码的?

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

+1

你知道未编码的byte数组应该包含什么?检查的唯一方法是取消编码,看看你是否回到原来的位置。 –

+0

您无法区分*看起来像Base64的东西,而实际上*就是* Base64的东西。您需要保持跟踪元数据。 – Durandal

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

+0

这只有在字节数组由'String.getBytes(encoding)'生成时才写入?另外,我们不知道使用了哪种编码。所以我会说这不是OP想要的东西 – Andremoniy

+1

@Andremoniy你对'String.getBytes'的假设是正确的,也是对正确编码的假设。我认为OP *想要的*很清楚,但不清楚OP *具有哪些* :-) – dasblinkenlight

+0

Base64不是* single *标准编码。有多种方言(部分兼容)。例如,填充在许多情况下是可选的。也有不止一个可能的字母表:https://en.wikipedia.org/wiki/Base64 – Durandal

您可以使用Apache的Base64.isBase64(byte[])方法:

import org.apache.commons.codec.binary.Base64; 

... 

boolean isBase64 = Base64.isBase64(bytes);