Java中检查字符串是否Base64编码的2种方法

在Java编程中,我们经常涉及数据编码和解码。此外,Base64 编码很流行,用于将二进制数据转换为ASCII文本格式。

Base64编码是什么
Base64 是一种二进制到文本的编码方案,可将二进制数据编码为 ASCII 字符串格式。
每组 3 个字节对应 4 个字符,由于数据将通过文本协议发送,因此通信过程安全。

1、使用Base64.getDecoder( ).decode () 
Java 在java.util包中提供了用于 Base64 编码和解码任务的库。此外,最常用的类是 Base64类,它是 Java 8 的一部分。

让我们 演示如何使用Base64类来检查字符串是否是 Base64 编码的:

@Test
public void givenBase64EncodedString_whenDecoding_thenNoException() {
    try {
        Base64.getDecoder().decode("SGVsbG8gd29ybGQ=");
        assertTrue(true);
    } catch (IllegalArgumentException e) {
        fail(
"Unexpected exception: " + e.getMessage());
    }
}

此测试函数应用Base64.getDecoder.decode ()方法来解码 Base64 编码的字符串SGVsbG8gd29ybGQ。

如果成功,则断言assertTrue (true),表明该字符串是 Base64 编码的。如果发生意外异常(捕获IllegalArgumentException),则测试失败。

@Test
public void givenNonBase64String_whenDecoding_thenCatchException() {
    try {
        Base64.getDecoder().decode("Hello world!");
        fail(
"Expected IllegalArgumentException was not thrown");
    } catch (IllegalArgumentException e) {
        assertTrue(true);
    }
}

与上一个测试方法相同,本次 使用Base64.getDecoder.decode ()方法来解码非 Base64 编码的字符串Hello World!。

如果测试抛出预期的 ( IllegalArgumentException ) ,则测试断言assertTrue (true)。否则,测试失败。 

2、使用正则表达式
另一方面,也可以考虑基于正则表达式的方法进行Base64编码验证。简单地说,我们可以使用一个模式并将其与所需的字符串进行匹配。

让我们看看如何实现这种方法: 

@Test
public void givenString_whenOperatingRegex_thenCheckIfItIsBase64Encoded() {
    Pattern BASE64_PATTERN = Pattern.compile(
      "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$"
    );
    assertTrue(BASE64_PATTERN.matcher(
"SGVsbG8gd29ybGQ=").matches());
}

在此测试方法中,我们使用Pattern.compile ()方法定义一个名为BASE64_PATTERN的正则表达式Pattern,以确保给定的字符串符合 Base64 编码格式。之后,我们创建一个Matcher对象,用于将输入字符串与定义的模式进行匹配。 如果整个字符串匹配,则返回true;否则,返回 false。