(wp)buuctf杂项达芬奇密码

转自个人博客0pt1mus

buuctf是一个收录了各个比赛的题目的靶场,真的是什么题都有,各种脑洞,稀奇古怪的加密编码类型,甚至还有什么中文电码之类的稀奇古怪。

大家有兴趣可以去刷刷。

解题思路

首先这道题题目是达芬奇密码,百度之后发现这是一部电影,当时也没想的去看一下电影的简介什么的,后面加buuctf关键字,也没有找到相应的wp。果断google,找到大佬的wp,发现在电影简介中会提到——斐波那契数列。

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

对比蒙娜丽莎中的数字列,发现数值一样,但是进行了位移。

之后对比,题目中给到的两个数列的长度都是32,并且flag也是32位,可以推测,神秘数列是通过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



36968853882116725547342176952286

规则如下:

第零位1还是1,没有位移。

第一位233是斐波那契数列的第十二位(以0开始算),因此下面神秘数字串的第一位的6是原本flag的第十二位。

第二位3是斐波那契数列的第三位,因此下面神秘数字串的第二位的9是原本flag的第三位。

以此类推…,写出如下脚本。

# coding=utf-8
fb = '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'

t = '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 '

m = '36968853882116725547342176952286'
s = 'a' * 32
s = list(s)
fb = fb.split(' ')
t = t.split(' ')


for i in range(32):
    s[fb.index(t[i])] = m[i]
for i in range(32):
    print(s[i], end='')

输出结果中还存在a,是因为斐波那契数列中存在两个1,而在index()找位置的时候,是从前往后找的,因此两次的1会覆盖掉。所以要将m中t的第二次出现1的位置上的数替换给a,然后复原被覆盖的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值