判断一个字符串是否被Base64加密

例如:

字符串:RGFqaURhbGlfSmlud2FuQ2hpamk=

首先要知道什么是Base64加密?就是Base64是怎么加密的?

Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息

至于Base64是怎么加密的?

看一个简单的例子:

转前: s 1 3
先转成ascii:对应 115 49 51
2进制: 01110011 00110001 00110011
6个一组(4组) 011100 110011 000100 110011
然后才有后面的 011100 110011 000100 110011
然后计算机是8位8位的存数 6不够,自动就补两个高位0了
所有有了 高位补0
科学计算器输入 00011100 00110011 00000100 00110011
得到 28 51 4 51
查对下照表 c z E z
 
总结Base64密文有如下特点:
* 字符串只可能包含A-Z,a-z,0-9,+,/,=字符 
* 字符串长度是4的倍数 
* =只会出现在字符串最后,可能没有或者一个等号或者两个等号
 
再进一步我们可以通过代码进行判断:
正则判断
1 private static boolean isBase64(String str) {
2 String base64Pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";
3 return Pattern.matches(base64Pattern, str);
4 }

Java代码判断

 1 private static boolean isBase64(String str) {
 2     if (str == null || str.trm().length() == 0) {
 3         return false;
 4     } else {
 5         if (str.length() % 4 != 0) {
 6             return false;
 7         }
 8 
 9         char[] strChars = str.toCharArray();
10         for (char c:strChars) {
11             if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') 
12                 || c == '+' || c == '/' || c == '=') {
13                 continue;
14             } else {
15                 return false;
16             }
17         }
18         return true;
19     }
20 }

PHP代码判断

$s = "RGFqaURhbGlfSmlud2FuQ2hpamk=";
 
if ($s == base64_encode(base64_decode($s))) {
echo 'yes';
}else{
echo 'no';

希望对大家理解Base64有所帮助。

 

猜你喜欢

转载自www.cnblogs.com/liuzeyu12a/p/9902769.html