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
本文作者:TTDB
本文链接:https://www.cnblogs.com/ttdb-huu/p/18272630
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步