buu crypto 达芬奇密码

顺带告诉小明达芬奇家窗台上有一串数字是关键 说明这串数字是key

猜测是替换密码,用某种方式映射。然后发现密文是32位,key是32位,flag是32位。确实是替换密码。

观察了很久,没发现规律。上网查了才知道是斐波那契数列的变式。明文中有1 2 3 5 8 13...可以看出,写代码列出斐波那契数列前32位,就可以发现确实是这样。

fq = [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]

m = [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]

那么,我们只需将密文中的变化从key还原到flag就知道答案了,而不需要知道变化的规律(卡这想了好久的笨蛋)。

代码思路:

创建一个flag列表,如1 在m中的0位,在fq中的第0位,就把key中的第0位放到flag中的第0位。

如233 在m中的第1位 ,在fq中13位。就把key中的第1位放到flag中的第13位。

即m的j位对应key的j位,fq的i位对应flag的i位。

代码如下:

m = [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]

key = '36968853882116725547342176952286'

fq = [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]

flag = []



for i in range(len(fq)):

    for j in range(len(m)):

        if fq[i] == m[j]:

            flag.append(str(key[j]))



print("".join(flag))

#flag{37995588256861228614165223347687}

因为有两个1,会有3737重复 去掉就好了 也有可能是73 都试试

最后就能得出flag

参考文章:vt.jnxl2023.sierting.com:30664/?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值