这次比赛我一共做了3题,一题就是之前写的珍贵资料
一题是这个密码学的
还有题是摩斯电码+栅栏加密,这题太简单就不写了
这题是对称密码1
对称密码1
题目链接:http://www.ichunqiu.com/racing/54391
下载下来是一个.c的文件
编译运行可以看到以十六进制分别输出三个例子的明文、密文、恢复出来的明文
1 |
以上是需要知道的信息,明文长度已知
则我们需要知道的是秘钥的长度,加密次数
注意:直接进行全局密钥空间穷举的解题方法,将被判定无效,得分在最终结果中将被扣除。
题目中包含了这个,也就不能直接爆破,其实题目里还有一句提示:
参照smaple1
所以我们看一下sample1
得到信息:1.加密次数1次 2.秘钥“Start”
所以,我刚开始的思路是秘钥为“End”、“Finish”、“Begin”
结果……显然都不对,还是太蠢了(捂脸)
好吧,在继续看,我们注意到,三个例子都是flag{XXXXXXXX}
最后我们也是要得到flag{XXXXXXXXX}
所以我们就知道了f,l,a,g,{,}对应的密文,再加上已知加密函数,我们就可以推出一部分秘钥了
1 | f l a g { XXXXXXXXXXXXXXXXXXX } |
按照这个写出程序可得部分秘钥
并且测试出秘钥长度为6,秘钥后四位为iter,前两位不知
只有两位不知,大小写加起来52*52爆破也就2704种情况
并且筛选出解密出来第一位为f的情况,写程序破解
1 | int main() |
从结果看出来筛选出的第二个显然就是flag了
(别问我为什么( ̄ε(# ̄)☆╰╮( ̄▽ ̄///))
所以答案就是flag{Congradulations_You_made_the_first_step}
对应秘钥为Beiter (所以这是什么鬼)
不得不说,这么想出来成就感好高哈哈哈哈哈哈哈哈(此处为豪迈的笑声)