bugku_PHP_encrypt_1(ISCCCTF)---WP

解题思路:
在这里插入图片描述
打开题目,发现一串编码
用base64,base32解码,并没有发现有用的信息
下载题目中的文件
进行代码审计
编码过程我已经标注
原代码:

<?php
function encrypt($data,$key)//传入两个参数
{
    $key = md5('ISCC');//key是ISCC字符串的md5值
    $x = 0;//定义变量
    $len = strlen($data);//取传入的第一个参数的长度
    $klen = strlen($key);//长度,固定
    for ($i=0; $i < $len; $i++) { //循环次数是第一个参数的长度
        if ($x == $klen)
        {
            $x = 0;////////////////////
        }
        $char .= $key[$x];//把key里面的元素依次累加到char里面,一共累加len(data)次
        $x+=1;
    }////////////////////////////////循环结束
    for ($i=0; $i < $len; $i++) {//再次循环len(data)次
        $str .= chr((ord($data[$i]) + ord($char[$i])) % 128);//data与char的对应ASCII码相加,变成字符串,存储到str中
    }
    return base64_encode($str);//再把进行base64加密
}
?>

参照原代码:解码代码如下

<?php
$encode_str='fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=';
$str=base64_decode($encode_str);//base64将字符串解密
$key = md5('ISCC');;//MD5加密的字符串ISCC
$klen=strlen($key);//求出key的长度
$x=0;//定义变量x
$data0='';
$data1='';
$len=strlen($str);//base64解密后的字符串,这也是最后字符串的长度
for ($i=0;$i<$len;$i++){
    if ($x==$klen) {
        $x=0;
}
    $char .=$key[$x];
    $x+=1;
}
for ($i=0; $i <$len ; $i++) { 
    $data0 .=chr(ord($str[$i])-ord($char[$i])+128);//编码时对其求余,故每个字符有两种可能
    $data1 .=chr(ord($str[$i])-ord($char[$i]));
}
echo "<br>";
echo ($data0);
echo "</br>";
echo "<br>";
echo ($data1);
echo "</br>";

运行结果如下:
在这里插入图片描述
对比找出可见字符:
Flag:{asdqwdfasfdawfefqwdqwdadwqadawd}

发布了5 篇原创文章 · 获赞 15 · 访问量 446

猜你喜欢

转载自blog.csdn.net/xiaoduanDDG/article/details/105256893
今日推荐