Crypto_[AFCTF2018]花开藏宝地

[AFCTF2018]花开藏宝地

题目描述:

第80804238007977405688648566160504278593148666302626415149704905628622876270862865768337953835725801963142685182510812938072115996355782396318303927020705623120652014080032809421180400984242061592520733710243483947230962631945045134540159517488288781666622635328316972979183761952842010806304748313326215619695085380586052550443025074501971925005072999275628549710915357400946408857号藏宝图

我把我的宝藏都藏在了那里!
那个神秘的地方!
于是我把藏宝图分成了5份,交给五位贤者让他们帮我妥善保管,并且只要搜集3份就可以获得宝藏的地址。

第一位贤者将藏宝图放进时空门中说道:
“那么口令就是我的生日吧,那可是个好数字呢。”

第二位贤者将藏宝图放进宝箱,【小】声念着自己的名字锁上了宝箱。

第三位贤者将藏宝图施上咒语丢进大海:“只要【大】声喊出那句咒语就可以把水驱逐!”

第四位贤者找了个破锁锁上了宝箱,狡黠地笑着:“谁知道它是坏的呢?”

第五位贤者给藏宝图裹上了隐身衣,放入了一个匣子里

据说,只有拥有【智慧】与【力量】就可以获得宝藏了呢!~
你是这样的勇者吗?

有五个压缩包,分别是数字爆破,小写字母爆破,大写字母爆破,无密码,ntfs流查看

最后一个压缩包:使用AlternateStreamView AlternateStreamView - View/Copy/Delete NTFS Alternate Data Streams (nirsoft.net)扫描zip5解压之后的Empty_Text.txt所在文件夹secret5,导出扫描结果,为一个压缩包,解压得到secret5.txt

现在得到5组数据:

x1 = 305345133911395218573790903508296238659147802274031796643017539011648802808763162902335644195648525375518941848430114497150082025133000033835083076541927530829557051524161069423494451667848236452337271862085346869364976989047180532167560796470067549915390773271207901537847213882479997325575278672917648417868759077150999044891099206133296336190476413164240995177077671480352739572539631359
m1 = 347051559622463144539669950096658163425646411435797691973701513725701575100810446175849424000000075855070430240507732735393411493866540572679626172742301366146501862670272443070970511943485865887494229487420503750457974262802053722093905126235340380261828593508455621667309946361705530667957484731929151875527489478449361198648310684702574627199321092927111137398333029697068474762820813413

5个均形如以上一组数据

这是Asmuth-Bloom门限方案:Secret Sharing - Web Encrypt

简单来说:

选取一个大素数 P P P P > S P>S P>S,其中 S S S为要加密的明文

m 1 , m 2 , . . . , m i m_1,m_2,...,m_i m1,m2,...,mi 两两互素

随机选取一个整数 A A A

y = S + A ∗ P y = S+A*P y=S+AP

y i ≡ y ( m o d   m i ) y_i\equiv y(mod~m_i) yiy(mod mi)

然后分作多组 ( y i , m i ) (y_i,m_i) (yi,mi)作为密文

有至少n组数据已知时,可以恢复明文

应用中国剩余定理,得到 y ≡ y ′ ( m o d   M ′ ) y\equiv y'(mod~M') yy(mod M)

最后 S = y ′ − A ∗ P S = y'-A*P S=yAP

一般来说密文会给出 A A A P P P还有 ( y i , m i ) (y_i,m_i) (yi,mi),但是这道题没有 A A A

实际上由于 P > S P>S P>S,所以我们可以直接 S = y ′   %   P S=y'~\%~P S=y % P,这种解法就不需要知道$A$的大小

由题目提示,只需要三组数据就可以解出明文

随便使用三组数据进行中国剩余定理

代码实现:

import gmpy2
from Crypto.Util.number import *

y1 = 305345133911395218573790903508296238659147802274031796643017539011648802808763162902335644195648525375518941848430114497150082025133000033835083076541927530829557051524161069423494451667848236452337271862085346869364976989047180532167560796470067549915390773271207901537847213882479997325575278672917648417868759077150999044891099206133296336190476413164240995177077671480352739572539631359
m1 = 347051559622463144539669950096658163425646411435797691973701513725701575100810446175849424000000075855070430240507732735393411493866540572679626172742301366146501862670272443070970511943485865887494229487420503750457974262802053722093905126235340380261828593508455621667309946361705530667957484731929151875527489478449361198648310684702574627199321092927111137398333029697068474762820813413
y2 = 152012681270682340051690627924586232702552460810030322267827401771304907469802591861912921281833890613186317787813611372838066924894691892444503039545946728621696590087591246339208248647926966446848123290344911662916758039134817404720512465817867255277476717353439505243247568126193361558042940352204093381260402400739429050280526212446967632582771424597203000629197487733610187359662268583
m2 = 347051559622463144539669950096658163425646411435797691973701513725701575100810446175849424000000075855070430240507732735393411493866540572679626172742301366146501862670272443070970511943485865887494229487420503750457974262802053722093905126235340380261828593508455621667309946361705530667957484731929151875527489478449361198648310684702574627199321092927111137398333029697068474762820818553
y3 = 40952412095267791829743119118333311932687870987919948671780408726886151430242690997238831410249436653299224291445012397813221016909468630372862610415470277301591535416193017906909638241212666990959976187895288689640250810487806568164431359887246760313154046201720715301307811951233077581047872827004824833876458687145628724339714212107812941785880896399800008924818580623979723496070665230
m3 = 347051559622463144539669950096658163425646411435797691973701513725701575100810446175849424000000075855070430240507732735393411493866540572679626172742301366146501862670272443070970511943485865887494229487420503750457974262802053722093905126235340380261828593508455621667309946361705530667957484731929151875527489478449361198648310684702574627199321092927111137398333029697068474762820819351
p = 80804238007977405688648566160504278593148666302626415149704905628622876270862865768337953835725801963142685182510812938072115996355782396318303927020705623120652014080032809421180400984242061592520733710243483947230962631945045134540159517488288781666622635328316972979183761952842010806304748313326215619695085380586052550443025074501971925005072999275628549710915357400946408857

M = m1*m2*m3
moudle = [m1,m2,m3]
y = [y1,y2,y3]
rev_moudle = []
Mi = []
m = 0
for i in moudle:
    temp = M // i
    Mi.append(temp)
    rev_moudle.append(gmpy2.invert(temp,i))
for i in range(3):
    m += y[i]*rev_moudle[i]*Mi[i] % M
m = m % M % p
print(long_to_bytes(m))

思路来源:[(49条消息) AFCTF2018]花开藏宝地_2er0!=O的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

M3ng@L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值