解題過程
原題加密函數嘿架,窩已經給出詳盡注釋了:
function encode($str){
$_o = strrev($str); //strrev — 反轉字符串
for ($_0=0; $_0 < strlen($_o); $_0++) {
$_c = substr($_o, $_0, 1); //返回第$_0個字符
$__ = ord($_c)+1; //返回ASCII碼瓶珊,然后把ASCII碼加一
$_c = chr($__); //得到相應字符
$_ = $_.$_c; //改變后的單個字符接到后面
}
return str_rot13(strrev(base64_encode($_)));
// 先取base64
// 再反轉
// str_rot13,翻閱php手冊得到下面信息:
// string str_rot13 ( string $str )
// 對 str 參數執(zhí)行 ROT13 編碼并將結果字符串返回耸彪。
// ROT13 編碼簡單地使用字母表中后面第 13 個字母替換當前字母伞芹,同時忽略非字母表中的字符。編碼和解碼都使用相同的函數蝉娜,傳遞一個編碼過的字符串作為參數唱较,將得到原始字符串。
}
所以召川,容易得出對應的解密函數:
function decode($a){
// x先解碼rot13南缓,再轉置,最后base64解碼:
$b = base64_decode(strrev(str_rot13($a)));
//取單個字符進行反加密:
for ($i=0; $i < strlen($b); $i++) {
$char = substr($b, $i, 1);//得到單個字符
$char = chr(ord($char)-1);//取得ASCII碼荧呐,然后減一汉形,再得到字符
$result = $result.$char;//字符串連接
}
//反轉字符串:
$result = strrev($result);
return $result;
}
所以纸镊,可得flag為nctf{rot13_and_base64_and_strrev}