- base64编码的字符串只包含大消息字母(A-Z,a-z)、数字0-9、+、/、=这64个字符
- base64编码是把3个字节转换成4个可打印字符,所以字符串长度一定可以被4整除,反之则不然,如:字符串root长度为4,但不是base64编码的字符串
- 只可能出现在字符串的最后,且数量只可能是0、1、2,原因是:如果原文长度不能被3整除,base64要在后面添加\0凑齐3n位。为了正确还原,添加了几个\0就加上几个等号
public static boolean checkBase64(String str) {
String base64Pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";
Boolean isLegal = str.matches(base64Pattern);
if (isLegal) {
try {
String decStr = new String(Base64.getDecoder().decode(str.getBytes()), StandardCharsets.UTF_8);
char[] passArr = decStr.toCharArray();
for (int i = 0; i < passArr.length; i++) {
if (charToByteAscii2(passArr[i]) < 32 || charToByteAscii2(passArr[i]) > 126) {
return false;
}
}
} catch (Exception e) {
return false;
}
}else {
return false;
}
return true;
}
private static byte charToByteAscii2(char ch){
byte byteAscii = (byte)ch;
return byteAscii;
}