【也许是双11史上最难拿的红包】What are you 弄啥嘞?
双11圈新人阿里云放大招了,向全国的程序员发出了一封密码挑战书,破解者将有机会赢取阿里云双11专属红包!
看不懂?没关系。即日起只要与阿里云官方微信互动,就能获取破解线索。当然,牛X的人无须线索[酷]。
一、第一重加密
由密文可以猜想加密方式是换字加密,所以需要先找到英文字母的对应表。
密文里有些字母标上了颜色,这应该就是提示了,红色字母为kearyod,绿色字母为d。
因为绿色是红色的反色,所以可以把绿色字母d反过来变成字母b。
小知识:补色在医疗方面也有所应用,如做手术的大夫穿绿色手术服,是因为手术中有大量红色的血,人看久了就会怠慢,从而延误手术。青绿色是红色的补色,大夫穿上了青绿色手术服,手术中看到红色,也看到青绿色,从而避免怠慢。
这样由kearyodb可以组合成英文单词keyboard
。大概是密文中没有字母b,出题人才会想到这一招。keyboard
是键盘的意思,也就是说要将电脑键盘上的字母排列映射为英文字母表。
二、第二重加密
知道了映射表,就可以写一段代码来解密:
1 | #coding:utf-8 |
输出结果为:
in the room there are four identical basketballs and two identical footballs. now if you want to put them in one line.zhw mony solutions are there? tips:please change the form of the number you get.the programmers!
其中zhw mony
应该是how many
的意思,可能出题者写错了,或者可能另有深意。
上面的两重加密也可以使用软件来暴力破解,可以参考文章《HCTF网络安全大赛——FuckMe》,结果如下:
三、第三重加密
将上面的明文翻译为中文为:
房间里有四个相同的篮球和两个相同的足球。现在如果你想把它们排成一行,总共有多少种方案?提示:请改变你算出的数字的形式。程序员!
这是一道排列的数学题,只要求出2个足球放在6个位置有多少种方法就行了,因为剩下4个位置只能放篮球,不会影响排列。
所以排列方法有:(6 * 5) / (2 * 1) = 15
。
如果非得写代码来解决,那么可以用两行代码来搞定:
1 | import itertools |
执行结果是15。
由提示请改变你算出的数字的形式。程序员!
可知,程序员经常和二进制数据打交道,而15转成二进制是1111
。
由于这是双11的活动,所以答案很有可能就是1111
。