题目描述
达芬奇一直是一个有争议的画家,科学家。。。小明为了研究他,从网上找到了名画蒙娜丽莎,一天深夜,小明突然从蒙娜丽莎背后的天空中看到了一串神秘的数字。顺带告诉小明达芬奇家窗台上有一串数字是关键。小明千里迢迢找到了这串数字,请将这个送分题做出来,亲,包邮哦(答案是一串32位十进制数字)
注意:得到的 flag 请包上 flag{} 提交
文件内容
达芬奇隐藏在蒙娜丽莎中的数字列: 1 233 3 2584 1346269 144 5 196418 21 1597 610 377 10946 89 514229 987 8 55 6765 2178309 121393 317811 46368 4181 1 832040 2 28657 75025 34 13 17711
记录在达芬奇窗台口的神秘数字串:
36968853882116725547342176952286
分析发现神秘数字串为32位,数字列也有32个数字,而flag也为一串32位10进制字符串。猜测神秘数字串可能为密文c
,且和数字列存在一一映射的关系。
熟悉斐波那契数列
的老哥就会发现,这32个数字包含了1 1 2 3 5 8 13 ......
写个脚本将斐波那契数列打印出来
def fib_loop_for(n):a, b = 0, 1for _ in range(n):a, b = b, a + breturn afor i in range(1,33):print(fib_loop_for(i))
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 21783091 233 3 2584 1346269 144 5 196418 21 1597 610 377 10946 89 514229 987 8 55 6765 2178309 121393 317811 46368 4181 1 832040 2 28657 75025 34 13 17711 c="36968853882116725547342176952286"
对比发现,数字列的确为斐波那契数列的变形。
那么flag应该就是根据斐波那契数列变形而变形的。我们只需要将其逆转就可以了。
第0
位的1
就在斐波那契数列第0
位,所以3
的位置不变,还在第0
位。
第1
位的233
的位置在斐波那契数列第12
位,所以6
应该移到第12
位。
我们需要从数字列中挨个取出数字,查询其在斐波那契数列中的位置,将密文c对应位置的数字,移到相应的位置即可。
附上python脚本:
def fib_loop_for(n):a, b = 0, 1for _ in range(n):a, b = b, a + breturn akey="1 233 3 2584 1346269 144 5 196418 21 1597 610 377 10946 89 514229 987 8 55 6765 2178309 121393 317811 46368 4181 1 832040 2 28657 75025 34 13 17711".split(" ")dic=[]c="36968853882116725547342176952286"m="*"*32m=list(m)for i in range(1,33):print(fib_loop_for(i),end=" ")dic.append(fib_loop_for(i))print(dic)for i in range(32):index = dic.index(int(key[i]))print(i,index,c[i])m[index]=c[i]print("".join(m))#7*995588256861228614165223347687#flag:37995588256861228614165223347687
注意数字列中的第2个1
在第24
位,由于string.index()
函数在查询下标的时候,会从右往左查询,故而第24
位的1
所对应的数字7
,覆盖了第0
个位置的1
所对应的数字3。所以第1
个位置没有数字,还是*
。所以得到两种结果,因为不确定到底那个1所对应的数字是3。
#73995588256861228614165223347687#37995588256861228614165223347687
如果觉得《达芬奇密码--buuctf密码学》对你有帮助,请点赞、收藏,并留下你的观点哦!