题目:http://www.shiyanbar.com/ctf/2039
MDEzMjE5MDAyMTg0MTUzMjQwMTQ0MDc3MjUzMDk2MTc1MTUzMTE4MTg4MDEwMDA2MTg4MDA0MjM4MDI1MTA3MTU4MTc5MTM4
请喜欢linux的你,自己动手写出解密代码吧
格式:flag{ }
从解题链接下载,是一段php代码
博客——你没有见过的加密,给出了解密代码
他给出的代码没有直接输出解密的结果,添加一句
echo decrypt("MDEzMjE5MDAyMTg0MTUzMjQwMTQ0MDc3MjUzMDk2MTc1MTUzMTE4MTg4MDEwMDA2MTg4MDA0MjM4MDI1MTA3MTU4
在linux下运行得到flag
flag{you_are_successful}
代码解析:
一、srand函数(srand(函数360百科))
当srand函数不使用时,rand函数虽然生成了10个随机数,但多次运行的结果都是一样的。
只有在srand函数生效时,才能实现真正的随机。
ps:time(NULL)返回当前系统时间
二、分析源程序test.php
设输入为a,即用test.php程序对字符a进行加密,逐行解析,得到a的加密结果
加密过程:
1.依次取字符串的每一位
2.将1的各位转成ASCII码值
3.将2的值与生成的随机数进行异或
4.将3的值进行拼接
5.将4的值进行base64加密(base64位加密,将三个字节加密为4个6位的单元)
可以看到对a进行加密为MJE0。
三、分析解密源代码
根据加密过程解密
解密过程应为:
1.对密码进行base64位解密(一串数字,每三位为一个字节)
2.将数字进行分解,每三位合一,组成数组
3.遍历数组,将每位与随机数异或
4.3异或得到的值为字符的ASCII码,将其转化为字符,组成字符串
5.解密成功
网友评论