您的位置:首页 > 编程语言 > Java开发

JAVA判断字符串是否为base64编码

2018-10-25 11:18 183 查看

百度一圈,不难发现base64编码之后的字符串具有哪些特点:

  • 字符串只可能包含A-Z,a-z,0-9,+,/,=字符
  • 字符串长度是4的倍数
  • 只会出现在字符串最后,可能没有或者一个等号或者两个等号
String inputStr="Test Base64 string";
String base64Pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";
Boolean isLegal = inputStr.matches(base64Pattern);
if (!isLegal) {
System.out.println("输入的不是Base64编码的字符串。");
}

上述表达中“base64Pattern ”为正则表达的匹配模板。
“^”:表示正则匹配的开始;
“[A-Za-z0-9+/]”:匹配“A-Z,a-z,0-9,+,/,=”等字符;
“{4}”:字符重复出现次数为4的配属
“([A-Za-z0-9+/]{4})”:表示等字符出现次数或字符串长度是4的倍数;
“*”:表示后续出现的字符串重复出现零次或更多次;
“|”:表示或的关系
“([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)”:表示同时匹配三种表达式,出现一次即为匹配成功;
“$”:表示匹配结束;

上述直接匹配字符串的方式判断是否为base64编码的方式,图片类型的Base64编码串可能会判断失败。
因为jpg等格式的图片采用Base64编码结果一般形式为:

// base64格式的图片
String base64Image = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ......."

会出现表示字符串信息的字符串头。因而,判断字符串是否为base64格式的图片时,应去掉字符串头再进行匹配。

String inputStr="Test Base64 Image";
String base64Pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";
if (inputStr.lastIndexOf(",") != -1) {
inputStr= inputStr.substring(inputStr.lastIndexOf(",") + 1);
}
Boolean isLegal = inputStr.matches(base64Pattern);
if (!isLegal) {
System.out.println("输入的不是Base64编码的字符串。");
}

同样的,判断字符串是否为base64格式的图片时,可以使用以下方法:

String inputStr="Test Base64 Image";
if (inputStr.lastIndexOf(",") != -1) {
inputStr= inputStr.substring(inputStr.lastIndexOf(",") + 1);
}
try {
BufferedImage bufImg = ImageIO.read(new ByteArrayInputStream(new BASE64Decoder().decodeBuffer(base64Str)));
if (null == bufImg) {
System.out.println("输入的不是Base64编码的图片。");
}
} catch (IOException e) {
e.printStackTrace();
}

=================================================================
参考博文1:https://blog.csdn.net/u011159417/article/details/80967902
参考博文2:https://www.geek-share.com/detail/2668842924.html

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: