判断⼀个字符串是否被Base64加密例如:
字符串:RGFqaURhbGlfSmlud2FuQ2hpamk=
⾸先要知道什么是Base64加密?就是Base64是怎么加密的?
Base64编码是从⼆进制到字符的过程,可⽤于在环境下传递较长的标识信息
⾄于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公式所有有了⾼位补0
科学计算器输⼊ 00011100 00110011 00000100 00110011
得到 28 51 4 51
查对下照表 c z E z
总结Base64密⽂有如下特点:
* 字符串只可能包含A-Z,a-z,0-9,+,/,=字符
* 字符串长度是4的倍数
* =只会出现在字符串最后,可能没有或者⼀个等号或者两个等号
再进⼀步我们可以通过代码进⾏判断:
正则判断
1private 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}==)$";
3return Pattern.matches(base64Pattern, str);
4 }
Java代码判断
1private static boolean isBase64(String str) {
2if (str == null || ().length() == 0) {
3return false;
4 } else {
5if (str.length() % 4 != 0) {
6return false;
7 }
8
9char[] strChars = CharArray();
10for (char c:strChars) {
11if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')
12 || c == '+' || c == '/' || c == '=') {
13continue;
14 } else {
15return false;
16 }
17 }
18return true;
19 }
20 }
PHP代码判断
$s = "RGFqaURhbGlfSmlud2FuQ2hpamk=";
if ($s == base64_encode(base64_decode($s))) {
echo 'yes';
}else{
echo 'no';
希望对⼤家理解Base64有所帮助。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论