目录
1、题目源码
<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
function encode($str){
$_o=strrev($str);
// echo $_o;
for($_0=0;$_0<strlen($_o);$_0++){
$_c=substr($_o,$_0,1);
$__=ord($_c)+1;
$_c=chr($__);
$_=$_.$_c;
}
return str_rot13(strrev(base64_encode($_)));
}
highlight_file(__FILE__);
/*
逆向加密算法,解密$miwen就是flag
*/
?>
2、解题准备
str_rot13(string);//把每一个字母在字母表中向前移动 13 个字母得到。数字和非字母字符保持不变。再运行一次可得到原字符串。
strrev(string);//反转字符串,再运行一次可得到原字符串。
base64_decode(string);//base64解密函数
base64_encode(string);//base64加密函数
strlen(string)//获取字符串长度。
$c=substr(string,start,len);//从start位开始取string字符,取len位
ord()//将字符转换为anscii
chr();//将anscii转换为字符
3、加密过程理解
自定义函数接收到字符串;
字符串反转;
将每一位字符转换为anscii加1再转换为字符
base64加密反转最后前移13位。
返回加密后字符串。
4、解密过程思路
将密文前移13位反转base64解密;
将每一位字符转换为anscii减1再转换为字符
字符串反转得到明文flag
5、解密PHP代码
<?php
#加密后的字符串
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
#对字符串每字符前移13位
$miwen=str_rot13($miwen);
#字符串反转
$miwen=strrev($miwen);
#字符串base64解密
$miwen=base64_decode($miwen);
$ss='';
#循环每个字符转换为ascii减1再转换为字符
for($i=0;$i<strlen($miwen);$i++){
$c=substr($miwen,$i,1);
$n=ord($c)-1;
$s=chr($n);
$ss=$ss.$s;
}
#反转字符串再输出,获取flag
echo strrev($ss);
?>