BUUCTF---达芬奇的密码
题目
达芬奇隐藏在蒙娜丽莎中的数字列: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
解题
查询题解得知与斐波那契数列有关
题目给出两个串,数字列应该就是与顺序有关,数字串就是flag打乱后的
如何纠正flag正确就是需要看数字列的顺序
给出斐波那契数列正确的顺序
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 2178309
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
c="36968853882116725547342176952286"
第0位的1就在斐波那契数列第0位,所以3的位置不变,还在第0位。
第1位的233的位置在斐波那契数列第12位,所以6应该移到第12位。
我们需要从数字列中挨个取出数字,查询其在斐波那契数列中的位置,将密文c对应位置的数字,移到相应的位置即可。
使用python脚本解密
def fib_loop_for(n): #斐波那契数列
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return a
key="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="*"*32
m=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])) #找出key中的index
print(i,index,c[i])
m[index]=c[i] #交换顺序
print("".join(m))
#7*995588256861228614165223347687
#flag:37995588256861228614165223347687

浙公网安备 33010602011771号