例如:
字符串: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的倍数
* =只会出现在字符串最后,可能没有或者一个等号或者两个等号
* 字符串长度是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有所帮助。