一、web2
1.基本知识点
strrev()
:反转字符串
str_rot13()
:用于字符串加密和解密的函数,它实现了 ROT13
算法。ROT13(rotate by 13 places)
是一种简单的字母替换加密算法,它将字母表中的每个字母替换为其后第13个字母。由于字母表有26个字母,所以再次应用 ROT13
会恢复原始字符串,因此它是一种对称加密。
2.解题过程
<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
function encode($str){
$_o=strrev($str);
// echo $_o;
for ($_0 = 0; $_0 < strlen($_o); $_0++) {
// 获取字符串 $_o 中索引为 $_0 的字符
$_c = substr($_o, $_0, 1);
// 获取该字符的 ASCII 码
$__ = ord($_c) + 1;
// 将 ASCII 码加 1 转换回字符
$_c = chr($__);
// 将新的字符添加到结果字符串中
$_ = $_ . $_c;
}
return str_rot13(strrev(base64_encode($_)));
}
highlight_file(__FILE__);
/*
逆向加密算法,解密$miwen就是flag
*/
?>
encode()
函数中,先将$str
进行反转,再将$str
的每个字符的ASCII
码加1,然后转为字符。最后进行base64
编码、反转、str_rot13
加密。
所以得到对$miwen
解密的代码为:
<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
$_o=base64_decode(strrev(str_rot13($miwen)));
$_="";
for($_0=0;$_0<strlen($_o);$_0++){
$_c=substr($_o,$_0,1);
//将每个字符的ASCII码减1
$__=ord($_c)-1;
$_c=chr($__);
$_=$_.$_c;
}
$a=strrev($_);
echo $_;
?>
得到flag:
flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}