小白笔记-bugkuctf PHP_encrypt_1(ISCCCTF)

 密文是:fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=

php文件点进去后是:

<?php
function encrypt($data,$key)
{
    $key = md5('ISCC');
    $x = 0;
    $len = strlen($data);
    $klen = strlen($key);
    for ($i=0; $i < $len; $i++) {
        if ($x == $klen)
        {
            $x = 0;
        }
        $char .= $key[$x];
        $x+=1;
    }
    for ($i=0; $i < $len; $i++) {
        $str .= chr((ord($data[$i]) + ord($char[$i])) % 128);
    }
    return base64_encode($str);
} 
?>

大概意思是取字符ISCC的MD5值为key,将Key扩充到和data数据段长度相等,如果超过key自身长度的部分从头开始取值。

然后将data和key的asc值各个相加后对128取余,最后base64加密得到密文

既然知道了加密方式,逆向就行了

MD5加密key,

base64解码后转字符,

再根据字符长度扩充MD5key的长度

base64解码后的字符串再减去key的asc值

最后得到的asc值再转成字符得到Flag

粗略的写了下代码

取了个巧 因为 密文base64解密再转成字符后的长度为38所以Key的长度也为38

手动补充密文32位到38位

import base64
key= "729623334f0aa2784a1599fd374c120d729623"
data = "fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA="
ans = base64.b64decode(data)
ans1 = ""
ans2 = ""
sum = 0
for each in ans:
    temp = chr(each)
    ans1 += temp
for each in range(0,len(ans1)):
    temp = (ord(ans1[each]) - ord(key[each]))%128
    ans2 += chr(temp)
    sum += 1
print(ans2)

答案如下

Flag:{asdqwdfasfdawfefqwdqwdadwqadawd}

初学安全,有错误之处的话还请见谅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值