Crypto|Buuctf 达芬奇密码

发布时间 2023-05-06 14:16:43作者: scarecr0w7
达芬奇隐藏在蒙娜丽莎中的数字列: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位十进制数字,猜测是按数列在斐波那契数列的位置更换字符串的顺序

第0位的1就在斐波那契数列第0位,所以3的位置不变,还在第0位。
第1位的233的位置在斐波那契数列第12位,所以6应该移到第12位。

脚本:

a = "0 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"
b = "0 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"
a = a.split(" ")
b = b.split(" ")
flag = []
m = "36968853882116725547342176952286"
for i in range(len(a)):
    for j in range(len(a)):    
        if a[i] == b[j]:
            flag.append(m[j])
            break
print(''.join(flag))
flag{37995588256861228614165223347687}