密文是: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}
初学安全,有错误之处的话还请见谅