判断一个字符串是否被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有所帮助。

 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/2154.html

(0)
上一篇 2021年7月15日
下一篇 2021年7月15日

相关推荐

发表回复

登录后才能评论