美文网首页
密码学 骚年来一发吗(分值250)

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

作者: Cytosine | 来源:发表于2017-10-22 19:43 被阅读0次

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

    解题过程

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

    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}

    相关文章

      网友评论

          本文标题:密码学 骚年来一发吗(分值250)

          本文链接:https://www.haomeiwen.com/subject/dmknuxtx.html