primegame_writeup

2020红帽杯 primegame_writeup

和背包很类似,直接构造格进行解题。

from decimal import *
import math
import random
import struct
sum=425985475047781336789963300910446852783032712598571885345660550546372063410589918
key=[80260960185991308862233904206310070533990667611589946606122867505419956976171, 127210612166669937440098469708903225618405881204503139663605609326034899514764, 186360178378489239360019555208872516895923557828929525429878875918225512971166, 225321001627212097357564035919404985096695078055324870037864774600825628967482, 277657303409607584257674154656459195924000370301674371438196861060248384105244, 297000844888383098784779809484430885883324243241834148304083596811292939014380, 328063692363312405002199287825630301497469991361288129915249443621480610038009, 340942741029472675751209085563496509709453734782185827155063370803195952763341, 363065426053956876789136573439806831974720562089628946045509535722562500188081, 389906219234236504589839583602940131460157322576695243167328885608693810978037, 397628552821546031788284866976481005071491904149911534621248760160933669557251, 418115729169523563213795873608243120399117141324174913328486917994007765693981, 430002268137029940210248704949846802606196021901113383903617291334026458415238, 435517219435792978548914327540992832715555899417703687725132714593809971489386, 445816634674050036737403156155461234669588861822924489511566801569753428925196, 459728395552222169203258553855093151725069310363221663578223702572833827483180, 472146579573229247119622639984879073370128462957392372371001752039887754216862, 476006673323706912851925923936227700248085741335072682402231383534286110106849, 486870143000003523136729364348591878682677901545106867214896561445453739365505, 493584608712480022671713045430033257561446779236439588774651853861690675528490, 496801262478540279019120702773153789961300482567894655561867654179758267817025, 505947495650660962867352926325259167807382070922044420606608075589355194666475, 511666785983460201877755690981276626403123717604080991115075395552267140888834, 519748583077886948223642831481589001894608334341623554432584379082164654601617]
A=matrix([
         [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,key[0]],
         [0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,key[1]],
         [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,key[2]],
         [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,key[3]],
         [0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,key[4]],
         [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,key[5]],
         [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,key[6]],
         [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,key[7]],
         [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,key[8]],
         [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,key[9]],
         [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,key[10]],
         [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,key[11]],
         [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,key[12]],
         [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,key[13]],
         [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,key[14]],
         [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,key[15]],
         [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,key[16]],
         [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,key[17]],
         [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,key[18]],
         [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,key[19]],
         [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,key[20]],
         [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,key[21]],
         [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,key[22]],
         [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,key[23]],
         [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,sum],
         ])
B=A.LLL()
print(B)

这里key的值变了一下,每一个值都乘以了2256并向下取整,然后sum有两个值,每个值都对应一个结果

结果一:

[ -102 -108 -97 -103 -123 -55 -49 -53 -99 -51 -57 -99 -51 -45 -49 -98 -52 -54 -45 -52 -99 -50 -51 -45 842]

最后一个元素不用,剩下的全部取绝对值转字符得到flag{715c39c3-1b46-4c23-

结果二:

[ -56 -48 -48 -54 -45 -50 -55 -98 -52 -51 -101 -98 -97 -50 -52 -52 -54 -125 0 0 0 0 0 0 582]

同样地操作,不过这里从0开始都不要,得到8006-27b43eba2446}

最后拼接得到

flag{715c39c3-1b46-4c23-8006-27b43eba2446}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值