主题 : 发布文章经常出现乱码 |
级别: 解元
|
1# 发表于:2023-04-20 16:29:30 IP:119.0.*.*
|
||||
---|---|---|---|---|---|
级别: 总版主
|
6# 发表于:2023-04-21 09:55:32 IP:123.207.*.*
|
||
---|---|---|---|
级别: 解元
|
9# 发表于:2023-05-09 16:32:11 IP:119.0.*.*
回复第7楼
你好,请问里面的StrUtils.isBase64能否提供给我?解密后存在误判是加密字符串的情况发生 |
||
---|---|---|---|
级别: 总版主
|
10# 发表于:2023-05-09 16:54:46 IP:183.217.*.*
/**
* 判断字符串是否为base64编码 * * @param str * @return Ascii码说明:共95个可读字符 * 0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符) * 32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。 * 65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。 */ public static boolean isBase64(String str) { //使用正则来判断是否符合base64编码的特征(但是无法排除类似于root这种特殊情况) 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) { //对于某些字符可能符合base64编码特征,但是却不是base64编码格式,进行进一步判断,如果解码后含有乱码(即Ascii码不在32~126), //说明虽然符合base64编码特征,但是不是base64编码,如:root 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; } |
||
---|---|---|---|