密码学 骚年来一发吗(分值250)

2017-10-22  本文已影响0人  Cytosine

点此进入南京邮电大学网络攻防训练平台

解题过程

原题加密函数,窝已经给出详尽注释了:

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 参数执行 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}

上一篇下一篇

猜你喜欢

热点阅读