下载附件,发现为一段php代码,如下:

    1. <?php
    2. function encrypt($data,$key)
    3. {
    4. $key = md5('ISCC');
    5. $x = 0;
    6. $len = strlen($data);
    7. $klen = strlen($key);
    8. for ($i=0; $i < $len; $i++) {
    9. if ($x == $klen)
    10. {
    11. $x = 0;
    12. }
    13. $char .= $key[$x];
    14. $x+=1;
    15. }
    16. for ($i=0; $i < $len; $i++) {
    17. $str .= chr((ord($data[$i]) + ord($char[$i])) % 128);
    18. }
    19. return base64_encode($str);
    20. }
    21. ?>

    题目描述为:fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=,base编码解码无解。

    经代码审计为加解密,根据加密逆解密即可,但是代码能力有限,只能参考大神的解密代码了。解密代码如下:

    <?php
    function decrypt($data, $key)
    {
        $key = md5($key);
        $x = 0;
        $data = base64_decode($data);
        $len = strlen($data);
        $l = strlen($key);
        $char = '';
        $str = '';
        for ($i = 0; $i < $len; $i++)
        {
            if ($x == $l) 
            {
                $x = 0;
            }
            $char .= substr($key, $x, 1);
            $x++;
        }
        for ($i = 0; $i < $len; $i++)
        {
            if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1)))
            {
                $str .= chr((ord(substr($data, $i, 1)) + 128) - ord(substr($char, $i, 1)));
            }
            else
            {
                $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
            }
        }
        return $str;
    }
    //  加密解密均需要用同一个加密密钥
    $data = 'fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=';        // 被加密信息  必须为字符串
    $key = 'ISCC';                  // 密钥
    $decrypt = decrypt($data, $key);
    echo '明文:'.$decrypt;
    ?>
    

    运行代码,输出flag。

    BugkuCTF-Web33-加解密 - 图1