随记
一、题目
from Crypto.Util.number import *
from Crypto.Random.random import randrange
import gmpy2
def getkey():
p = getPrime(512)
q = getPrime(512)
n = p*q
y = randrange(n)
u = randrange(n)
return p,q,n,y,u
def gethint():
e = 513
n = getkey()[2]
hint = pow(hint,e,n)
return hint
def encrypt(y,n,m,u):
r = 226148347
c = pow(y,m,n)*pow(u,r,n)
return c
m = str(bytes_to_long(b"flag{xxxxxxxxxxx}"))
mlist = [m[i:i+6]for i in range(0,96,6)]
clist=[]
for x in mlist:
c = encrypt(y,n,int(x),u)
clist.append(c)
print(clist)
#clist = [3747642813724975823199029900274991712734664897922342965710687450933595369352445182442633178498597197849447616168282180335554710468359353938482451190970627801078527351236888862368984935286849395041506436483799666833682067944363036799110592710853470153316127274929244139098276109307468364842689460040629461129884540435374787165789410865046463250411550862577004121241628690689494226785316986752815618741447268373256295089312480904659514610597665650910141032036624284597615571960090303557731466909028446725988952737387125728928376315689187520029509567194238736410170201081087106066225284654634394837550128571766965004832, 2528492829000921903363134166541137822420117544983124354245100651583358090519256202233707729637509344850145052161776796534255117757829011301634718690937083065309398345671052810916071222757895628218069990359755695049007400886276186576524045334711707629795088278972879273554153869740829666509835704526649533634900938202600372985320262245406152454659624460418605932649584935276090545874724903435790053897301638619603018145165094704309331570877888488883315690701111076418820644878157204068389595321030509833291393672597852129888624967423475262053677291285754405897504479758225636486089974457411851659324917825529783245152, 308885529931380632464314687179322709459847933947929013922055175565404128376764346271556870211203039300645378050131872508256110983474191579705635812663990251749791931454541556624156109914358490679612070411937457829406790102137242759783291253681823982168344535879999483888309216072570605411939930059808434480593076811120780676144231657118946239305011883428949565167168198201476410534576273414467444004516761958701727852347065525587543896715533123205844753101909755308017658397355622445713905247436572447174689059551112078785721118790583982024130564861360026542223449628762003867298100565937475421543408123983088706364, 3771819848688444987024134085606019059797846147039131132583189986384732485225423381153459176912230583058577208626458005767510120307386642877930937949630459509152989636091229550599955946241776027341073365286094326464809846260940864861435869412676238648364273445775192807401790498415714069172926644506069590798871211146133323790813596409717091160864162385055324040450218877056281068086049756373176868952915233428927483581970075103779924604279397342152476742148780135720838558730523943107027481729293066595731162521896672487377204336657422232799781907107407884937739696215660767317431179586785557390903985931002275554060, 5075464395236811009421273817615282155407790444302077605059658614171458387668119462205816867838988851389422746986407836419657736288884559155932321047268764949953260257176264580094874413091141996930120108046864494798927966406047077492105919892000505350114415536863509952814563614102920570613468225032301753101148002158548024162628467739534193790953974566663596203871135644389744580544214035603665839495193171611460979413597807990140798045144094474320125856419421278305981681609084732513270710988983303476402286196086012770586066346124765529366149405267932659675215276411381952747418535420991319212142669456590695629960, 3407511236408311972414413799914470448890009802496957323454947535442187845987893424250860682116027860107950198820268372268579872910970621914046034510976953388397047500197476355549295221741998836907066189810889499485227754413542016676587271762554764304008946419224402329993185120490144627071193330276535828255828846520436561146154798710305824232304783732823481326749903282447972877074931304764803532523683459628563462703685610567172858097941184696750138427972699785470481029921548294741446580957742652454766981643914016357427544096561129389790886733981692867012404146696003902141041815985540046731496473182821703309028, 4741924135454688583730624970892823697919860681421996145834616068008413424325655419480425131018626194378722341879243112634393619075444036571857820929506012542094108097155446783162682879161032523337081923659335151255116977166034394392138788069384880673594840803324602876786803204085950349482170839988248212579645422613665745883084832869546599608763533252918547764065726141928737102212995228755475131140296046481063989371402211995973966482332551943100689985186923195312041274724729036618208704813641731720932295888520491443347377409377580492768299959890670429562866246687271528959876170387608403110351958114579927506304, 1999018871048273569144378701734611320888508672187165289014955122412064203669830513091287382722426088087017328678790430309266639337627921009170980336745546193166635705986823236801670943367802095408801655521785387833527217592994011821943982045254331118773889696052967883733143834587098594904595305738607780015808096575036235072069721471692796066124791149449318302904336195193494845060964126654336536247427755969092586688521899990236856223345804660519736094595609311352558845882202923899678380739374714698259225228936989809826634645740760642694759616101231387000381058106915403110274801285596326125297485214959353290940, 1948013801392750969823637131671352137658167195274143107005340816292140232720133669012158581307038291737418894946544069663899102126956003488014214057312447205685029844082064096023928057417291596874447884605143702047932887528843167093833954775691653272555640267639751633541462450084471196900209263830333525277220072029980398197749510679839342792785890684708491961424162228413231743043124308685199084918824816489882285692118611842082009504765908012798447833498136019882635302555688939651815031973353358435161675399113992627986768227409960578634001543471214487485255243461751815698335509794055947087286114656800054473292, 1141437027180415972105612696552127977405420153006195418721490411271800069135718278165152801007750330501262750004623874705082099490523511100373081840689821163106322406124026769651420845329154827685085617574176065976339435633134824595624524627088248252092598197722918078998076434916449862731248079030624221692325745750896564648000290742551052642355722562878478865524917028793827702132161984004153023325741484381111607400863349444740104793840567507536270172767480310866781809077908640359299128865255603326401315523692010932293405015128311302138067769456277011289230823794778657268255545625335416197402301725893287555980, 3566930276556847662407955595754833059717140514657316893495660019838636181788810896041688646106207323554221031874360071269550011659676674383863918335028291123751134424632057749785373065433076491988559781503934660001750570627311134765036165705954332185301936179773404572003320896762228624364540049615371971559097519985362191123664625757709029829599143801245709676628713609915356186580264598304402810784612922026795893850450527427272737354436746966890499132486394599908762811881720925684570774875643591142568383436236345890683777911013529742913319641662336772165874111301378124729217947288283063077240947335691788086168, 3576650860432422223583147332018249726109898065007073075138971756960775500995267506417850241102143641048602546460052014209593367126785970073482452660263894729721851684144363032277603318432813884497995296597061805104745241888096605817438441483037309421394847671710796613198415955478755726814543812994431867429298894952245792402684319688825010944149547067465207888501170990648829619003026548656481047973349952359118188073517286698011543980389204781086051521459003264987558417126561840352774072296063459468021904649728967963388738401608558056489130024789438519590334090089773007755591189939740677243979820458493144980392, 4350997751210099663978946933935585040227023982182850261254605863083765503731205733268838158172924219553327718286789703280638051398648610699948626043532951862867580416067251003608269155670169939298714932340681792964320736816780229044178506872246630707755230983492883448220501356700331277789286453937968949662078161499642705391278769760726986935689609881949665969826496251497367199781183749097405510344484863072593665616026336899836986753811748216543814974517696768384308433438780911444972507286950175006169641114186504781054688208475638072378857240190894026171091533023164636776622076541383535461373645433266960017712, 892981828661846332321659131807615282280249477711294253253212413777920838496107630318223579672083894894451935148389547503547492379933350788958914090212020896990868830058933307940724220011300125094751977989917675118676590520999572964161985725492919306105854057009614769320130210574771426801169567622970906956916221260001167254703017107277470541552616779804417224122473349816583186677922425367534380964350224736796114281220820190810624524117078723226422963776662392914521213014923544618770181340166706832771231307161784152627545274929195861551226576804165896592809867096124549284118089631057563126426027420260635919968, 3136815584136185635807064321692312569674722534451336769816955698632863825006376033909114660516675478293881837016011543435378497470537074166059107700628719140733508731950660902149256175030655145315849180090335217229219043866513155401389302414660680775143001901814114942946718341454196665483269935222368185050483440577580360831766520836680629122782954498807007338328873991851249106053098812265149607886640343923368978944598112025824715392087444295945894092890811776453173763690014310425575066099801556548994916981536395164171121627687746245490619554753957838628815099563661739687086864730572773664904486578210853730544, 2113062060486971598614660809305563033985764622474548122380308569428136017611053863445967297111404774763109484504122816753650308148998975953965996300691871728819200265785024367588746597604841258215094978690731600856826591231678263874561898505953097690205340731849405106170150998622505894050884895412495578847018238615636181770600587967592948829128913474368161180593558645409419538940006484549650446187200683981427963054612700627400579301620926123141956976585375762257508190263098544332224391721526676541428977528527512570658211073039259904803718682242768018991548930218521958455294442155555087117825490202925267777448]
#n = 89820998365358013473897522178239129504456795742012047145284663770709932773990122507570315308220128739656230032209252739482850153821841585443253284474483254217510876146854423759901130591536438014306597399390867386257374956301247066160070998068007088716177575177441106230294270738703222381930945708365089958721
#hint = 38751393103897326984966225657881797063081924259265913066269771931771353744954287558965505880351932624445905856402225526480435627356053320503495920770512272409426395361140215523926174575229867615188057195850608691252103369249627456812445758919344593590045677681290101112949924842617295206821539602559851702561
#y = 66072576851115053483753421610614541844018469811307289044376046636066283286015666113841366751467570398740267396323696543323500683730893697709530226067963607520757855845322501593037662830639871680870276932879716815543359805397965034010780176235355960215724048292101823589008019607937464768483480936490160615768
二、题解
非预期解:
观察到如下加密逻辑:
def encrypt(y,n,m,u):
r = 226148347
c = pow(y,m,n)*pow(u,r,n)
return c
for x in mlist:
c = encrypt(y,n,int(x),u)
clist.append(c)
可知u、r、n都是常数,所以pow(u,r,n)
是常数
于是我们对clist里参数使用gcd,即可求出pow(u,r,n)
也就能求出每一个pow(y,m,n)
又知道y、n,且m最多为六位整数(mlist = [m[i:i+6]for i in range(0,96,6)]
)
故,从0开始到999999遍历一遍m,把符合情况的m记录下来,不足六位高位补充0再拼接在一起即可得解
import gmpy2
import libnum
clist = [3747642813724975823199029900274991712734664897922342965710687450933595369352445182442633178498597197849447616168282180335554710468359353938482451190970627801078527351236888862368984935286849395041506436483799666833682067944363036799110592710853470153316127274929244139098276109307468364842689460040629461129884540435374787165789410865046463250411550862577004121241628690689494226785316986752815618741447268373256295089312480904659514610597665650910141032036624284597615571960090303557731466909028446725988952737387125728928376315689187520029509567194238736410170201081087106066225284654634394837550128571766965004832, 2528492829000921903363134166541137822420117544983124354245100651583358090519256202233707729637509344850145052161776796534255117757829011301634718690937083065309398345671052810916071222757895628218069990359755695049007400886276186576524045334711707629795088278972879273554153869740829666509835704526649533634900938202600372985320262245406152454659624460418605932649584935276090545874724903435790053897301638619603018145165094704309331570877888488883315690701111076418820644878157204068389595321030509833291393672597852129888624967423475262053677291285754405897504479758225636486089974457411851659324917825529783245152, 308885529931380632464314687179322709459847933947929013922055175565404128376764346271556870211203039300645378050131872508256110983474191579705635812663990251749791931454541556624156109914358490679612070411937457829406790102137242759783291253681823982168344535879999483888309216072570605411939930059808434480593076811120780676144231657118946239305011883428949565167168198201476410534576273414467444004516761958701727852347065525587543896715533123205844753101909755308017658397355622445713905247436572447174689059551112078785721118790583982024130564861360026542223449628762003867298100565937475421543408123983088706364, 3771819848688444987024134085606019059797846147039131132583189986384732485225423381153459176912230583058577208626458005767510120307386642877930937949630459509152989636091229550599955946241776027341073365286094326464809846260940864861435869412676238648364273445775192807401790498415714069172926644506069590798871211146133323790813596409717091160864162385055324040450218877056281068086049756373176868952915233428927483581970075103779924604279397342152476742148780135720838558730523943107027481729293066595731162521896672487377204336657422232799781907107407884937739696215660767317431179586785557390903985931002275554060, 5075464395236811009421273817615282155407790444302077605059658614171458387668119462205816867838988851389422746986407836419657736288884559155932321047268764949953260257176264580094874413091141996930120108046864494798927966406047077492105919892000505350114415536863509952814563614102920570613468225032301753101148002158548024162628467739534193790953974566663596203871135644389744580544214035603665839495193171611460979413597807990140798045144094474320125856419421278305981681609084732513270710988983303476402286196086012770586066346124765529366149405267932659675215276411381952747418535420991319212142669456590695629960, 3407511236408311972414413799914470448890009802496957323454947535442187845987893424250860682116027860107950198820268372268579872910970621914046034510976953388397047500197476355549295221741998836907066189810889499485227754413542016676587271762554764304008946419224402329993185120490144627071193330276535828255828846520436561146154798710305824232304783732823481326749903282447972877074931304764803532523683459628563462703685610567172858097941184696750138427972699785470481029921548294741446580957742652454766981643914016357427544096561129389790886733981692867012404146696003902141041815985540046731496473182821703309028, 4741924135454688583730624970892823697919860681421996145834616068008413424325655419480425131018626194378722341879243112634393619075444036571857820929506012542094108097155446783162682879161032523337081923659335151255116977166034394392138788069384880673594840803324602876786803204085950349482170839988248212579645422613665745883084832869546599608763533252918547764065726141928737102212995228755475131140296046481063989371402211995973966482332551943100689985186923195312041274724729036618208704813641731720932295888520491443347377409377580492768299959890670429562866246687271528959876170387608403110351958114579927506304, 1999018871048273569144378701734611320888508672187165289014955122412064203669830513091287382722426088087017328678790430309266639337627921009170980336745546193166635705986823236801670943367802095408801655521785387833527217592994011821943982045254331118773889696052967883733143834587098594904595305738607780015808096575036235072069721471692796066124791149449318302904336195193494845060964126654336536247427755969092586688521899990236856223345804660519736094595609311352558845882202923899678380739374714698259225228936989809826634645740760642694759616101231387000381058106915403110274801285596326125297485214959353290940, 1948013801392750969823637131671352137658167195274143107005340816292140232720133669012158581307038291737418894946544069663899102126956003488014214057312447205685029844082064096023928057417291596874447884605143702047932887528843167093833954775691653272555640267639751633541462450084471196900209263830333525277220072029980398197749510679839342792785890684708491961424162228413231743043124308685199084918824816489882285692118611842082009504765908012798447833498136019882635302555688939651815031973353358435161675399113992627986768227409960578634001543471214487485255243461751815698335509794055947087286114656800054473292, 1141437027180415972105612696552127977405420153006195418721490411271800069135718278165152801007750330501262750004623874705082099490523511100373081840689821163106322406124026769651420845329154827685085617574176065976339435633134824595624524627088248252092598197722918078998076434916449862731248079030624221692325745750896564648000290742551052642355722562878478865524917028793827702132161984004153023325741484381111607400863349444740104793840567507536270172767480310866781809077908640359299128865255603326401315523692010932293405015128311302138067769456277011289230823794778657268255545625335416197402301725893287555980, 3566930276556847662407955595754833059717140514657316893495660019838636181788810896041688646106207323554221031874360071269550011659676674383863918335028291123751134424632057749785373065433076491988559781503934660001750570627311134765036165705954332185301936179773404572003320896762228624364540049615371971559097519985362191123664625757709029829599143801245709676628713609915356186580264598304402810784612922026795893850450527427272737354436746966890499132486394599908762811881720925684570774875643591142568383436236345890683777911013529742913319641662336772165874111301378124729217947288283063077240947335691788086168, 3576650860432422223583147332018249726109898065007073075138971756960775500995267506417850241102143641048602546460052014209593367126785970073482452660263894729721851684144363032277603318432813884497995296597061805104745241888096605817438441483037309421394847671710796613198415955478755726814543812994431867429298894952245792402684319688825010944149547067465207888501170990648829619003026548656481047973349952359118188073517286698011543980389204781086051521459003264987558417126561840352774072296063459468021904649728967963388738401608558056489130024789438519590334090089773007755591189939740677243979820458493144980392, 4350997751210099663978946933935585040227023982182850261254605863083765503731205733268838158172924219553327718286789703280638051398648610699948626043532951862867580416067251003608269155670169939298714932340681792964320736816780229044178506872246630707755230983492883448220501356700331277789286453937968949662078161499642705391278769760726986935689609881949665969826496251497367199781183749097405510344484863072593665616026336899836986753811748216543814974517696768384308433438780911444972507286950175006169641114186504781054688208475638072378857240190894026171091533023164636776622076541383535461373645433266960017712, 892981828661846332321659131807615282280249477711294253253212413777920838496107630318223579672083894894451935148389547503547492379933350788958914090212020896990868830058933307940724220011300125094751977989917675118676590520999572964161985725492919306105854057009614769320130210574771426801169567622970906956916221260001167254703017107277470541552616779804417224122473349816583186677922425367534380964350224736796114281220820190810624524117078723226422963776662392914521213014923544618770181340166706832771231307161784152627545274929195861551226576804165896592809867096124549284118089631057563126426027420260635919968, 3136815584136185635807064321692312569674722534451336769816955698632863825006376033909114660516675478293881837016011543435378497470537074166059107700628719140733508731950660902149256175030655145315849180090335217229219043866513155401389302414660680775143001901814114942946718341454196665483269935222368185050483440577580360831766520836680629122782954498807007338328873991851249106053098812265149607886640343923368978944598112025824715392087444295945894092890811776453173763690014310425575066099801556548994916981536395164171121627687746245490619554753957838628815099563661739687086864730572773664904486578210853730544, 2113062060486971598614660809305563033985764622474548122380308569428136017611053863445967297111404774763109484504122816753650308148998975953965996300691871728819200265785024367588746597604841258215094978690731600856826591231678263874561898505953097690205340731849405106170150998622505894050884895412495578847018238615636181770600587967592948829128913474368161180593558645409419538940006484549650446187200683981427963054612700627400579301620926123141956976585375762257508190263098544332224391721526676541428977528527512570658211073039259904803718682242768018991548930218521958455294442155555087117825490202925267777448]
n = 89820998365358013473897522178239129504456795742012047145284663770709932773990122507570315308220128739656230032209252739482850153821841585443253284474483254217510876146854423759901130591536438014306597399390867386257374956301247066160070998068007088716177575177441106230294270738703222381930945708365089958721
y = 66072576851115053483753421610614541844018469811307289044376046636066283286015666113841366751467570398740267396323696543323500683730893697709530226067963607520757855845322501593037662830639871680870276932879716815543359805397965034010780176235355960215724048292101823589008019607937464768483480936490160615768
ur = gmpy2.gcd(clist[2], clist[1])
dict_ = {}
for c in clist:
dict_[c//ur] = 0
for m in range(999999):
if m % 1000 == 0:
print(m)
tmp = int(pow(y, m, n))
if tmp in dict_.keys():
dict_[tmp] = str(m).zfill(6)
flag = ''
for i in dict_.values():
flag += i
print(flag)
print(libnum.n2s(int(flag)))
#854589733786468787388496586572173509699820396266813289838640250947432845452644495851867140941181
#b'flag{fe9ffff7-ab85-46fc-bbcc-b45973f96e}
预期解:
后来看wp上的预期解、分享一下
题目描述:看上去有点像paillier cryptosystem
题目考点:1. 多项式上n的分解 2. benaloh cryptosystem
1.首先通过hint n构造f(x) = hint^512-1 = kn,将n的分解转移到多项式f(x)的分解上
from gmpy2 import gcd
x = var('x')
f = x**512 - 1
print(f.factor())
n = 89820998365358013473897522178239129504456795742012047145284663770709932773990122507570315308220128739656230032209252739482850153821841585443253284474483254217510876146854423759901130591536438014306597399390867386257374956301247066160070998068007088716177575177441106230294270738703222381930945708365089958721
x = 38751393103897326984966225657881797063081924259265913066269771931771353744954287558965505880351932624445905856402225526480435627356053320503495920770512272409426395361140215523926174575229867615188057195850608691252103369249627456812445758919344593590045677681290101112949924842617295206821539602559851702561
f_list = [(x^256 + 1),(x^128 + 1),(x^64 + 1),(x^32 + 1),(x^16 + 1),(x^8 + 1),(x^4 + 1),(x^2 + 1),(x + 1),(x - 1)]
for i in f_list:
if gcd(i,n)>1:
print(gcd(i,n))
2.进行benaloh的解密,因r较大,直接选用bsgs算法进行求解,最后将m拼接构成flag,完整exp如下:
from Crypto.Util.number import *
from gmpy2 import gcd
x = var('x')
f = x**512 - 1
print(f.factor())
n = 89820998365358013473897522178239129504456795742012047145284663770709932773990122507570315308220128739656230032209252739482850153821841585443253284474483254217510876146854423759901130591536438014306597399390867386257374956301247066160070998068007088716177575177441106230294270738703222381930945708365089958721
x = 38751393103897326984966225657881797063081924259265913066269771931771353744954287558965505880351932624445905856402225526480435627356053320503495920770512272409426395361140215523926174575229867615188057195850608691252103369249627456812445758919344593590045677681290101112949924842617295206821539602559851702561
f_list = [(x^256 + 1),(x^128 + 1),(x^64 + 1),(x^32 + 1),(x^16 + 1),(x^8 + 1),(x^4 + 1),(x^2 + 1),(x + 1),(x - 1)]
for i in f_list:
if gcd(i,n)>1:
print(gcd(i,n))
clist = [3747642813724975823199029900274991712734664897922342965710687450933595369352445182442633178498597197849447616168282180335554710468359353938482451190970627801078527351236888862368984935286849395041506436483799666833682067944363036799110592710853470153316127274929244139098276109307468364842689460040629461129884540435374787165789410865046463250411550862577004121241628690689494226785316986752815618741447268373256295089312480904659514610597665650910141032036624284597615571960090303557731466909028446725988952737387125728928376315689187520029509567194238736410170201081087106066225284654634394837550128571766965004832, 2528492829000921903363134166541137822420117544983124354245100651583358090519256202233707729637509344850145052161776796534255117757829011301634718690937083065309398345671052810916071222757895628218069990359755695049007400886276186576524045334711707629795088278972879273554153869740829666509835704526649533634900938202600372985320262245406152454659624460418605932649584935276090545874724903435790053897301638619603018145165094704309331570877888488883315690701111076418820644878157204068389595321030509833291393672597852129888624967423475262053677291285754405897504479758225636486089974457411851659324917825529783245152, 308885529931380632464314687179322709459847933947929013922055175565404128376764346271556870211203039300645378050131872508256110983474191579705635812663990251749791931454541556624156109914358490679612070411937457829406790102137242759783291253681823982168344535879999483888309216072570605411939930059808434480593076811120780676144231657118946239305011883428949565167168198201476410534576273414467444004516761958701727852347065525587543896715533123205844753101909755308017658397355622445713905247436572447174689059551112078785721118790583982024130564861360026542223449628762003867298100565937475421543408123983088706364, 3771819848688444987024134085606019059797846147039131132583189986384732485225423381153459176912230583058577208626458005767510120307386642877930937949630459509152989636091229550599955946241776027341073365286094326464809846260940864861435869412676238648364273445775192807401790498415714069172926644506069590798871211146133323790813596409717091160864162385055324040450218877056281068086049756373176868952915233428927483581970075103779924604279397342152476742148780135720838558730523943107027481729293066595731162521896672487377204336657422232799781907107407884937739696215660767317431179586785557390903985931002275554060, 5075464395236811009421273817615282155407790444302077605059658614171458387668119462205816867838988851389422746986407836419657736288884559155932321047268764949953260257176264580094874413091141996930120108046864494798927966406047077492105919892000505350114415536863509952814563614102920570613468225032301753101148002158548024162628467739534193790953974566663596203871135644389744580544214035603665839495193171611460979413597807990140798045144094474320125856419421278305981681609084732513270710988983303476402286196086012770586066346124765529366149405267932659675215276411381952747418535420991319212142669456590695629960, 3407511236408311972414413799914470448890009802496957323454947535442187845987893424250860682116027860107950198820268372268579872910970621914046034510976953388397047500197476355549295221741998836907066189810889499485227754413542016676587271762554764304008946419224402329993185120490144627071193330276535828255828846520436561146154798710305824232304783732823481326749903282447972877074931304764803532523683459628563462703685610567172858097941184696750138427972699785470481029921548294741446580957742652454766981643914016357427544096561129389790886733981692867012404146696003902141041815985540046731496473182821703309028, 4741924135454688583730624970892823697919860681421996145834616068008413424325655419480425131018626194378722341879243112634393619075444036571857820929506012542094108097155446783162682879161032523337081923659335151255116977166034394392138788069384880673594840803324602876786803204085950349482170839988248212579645422613665745883084832869546599608763533252918547764065726141928737102212995228755475131140296046481063989371402211995973966482332551943100689985186923195312041274724729036618208704813641731720932295888520491443347377409377580492768299959890670429562866246687271528959876170387608403110351958114579927506304, 1999018871048273569144378701734611320888508672187165289014955122412064203669830513091287382722426088087017328678790430309266639337627921009170980336745546193166635705986823236801670943367802095408801655521785387833527217592994011821943982045254331118773889696052967883733143834587098594904595305738607780015808096575036235072069721471692796066124791149449318302904336195193494845060964126654336536247427755969092586688521899990236856223345804660519736094595609311352558845882202923899678380739374714698259225228936989809826634645740760642694759616101231387000381058106915403110274801285596326125297485214959353290940, 1948013801392750969823637131671352137658167195274143107005340816292140232720133669012158581307038291737418894946544069663899102126956003488014214057312447205685029844082064096023928057417291596874447884605143702047932887528843167093833954775691653272555640267639751633541462450084471196900209263830333525277220072029980398197749510679839342792785890684708491961424162228413231743043124308685199084918824816489882285692118611842082009504765908012798447833498136019882635302555688939651815031973353358435161675399113992627986768227409960578634001543471214487485255243461751815698335509794055947087286114656800054473292, 1141437027180415972105612696552127977405420153006195418721490411271800069135718278165152801007750330501262750004623874705082099490523511100373081840689821163106322406124026769651420845329154827685085617574176065976339435633134824595624524627088248252092598197722918078998076434916449862731248079030624221692325745750896564648000290742551052642355722562878478865524917028793827702132161984004153023325741484381111607400863349444740104793840567507536270172767480310866781809077908640359299128865255603326401315523692010932293405015128311302138067769456277011289230823794778657268255545625335416197402301725893287555980, 3566930276556847662407955595754833059717140514657316893495660019838636181788810896041688646106207323554221031874360071269550011659676674383863918335028291123751134424632057749785373065433076491988559781503934660001750570627311134765036165705954332185301936179773404572003320896762228624364540049615371971559097519985362191123664625757709029829599143801245709676628713609915356186580264598304402810784612922026795893850450527427272737354436746966890499132486394599908762811881720925684570774875643591142568383436236345890683777911013529742913319641662336772165874111301378124729217947288283063077240947335691788086168, 3576650860432422223583147332018249726109898065007073075138971756960775500995267506417850241102143641048602546460052014209593367126785970073482452660263894729721851684144363032277603318432813884497995296597061805104745241888096605817438441483037309421394847671710796613198415955478755726814543812994431867429298894952245792402684319688825010944149547067465207888501170990648829619003026548656481047973349952359118188073517286698011543980389204781086051521459003264987558417126561840352774072296063459468021904649728967963388738401608558056489130024789438519590334090089773007755591189939740677243979820458493144980392, 4350997751210099663978946933935585040227023982182850261254605863083765503731205733268838158172924219553327718286789703280638051398648610699948626043532951862867580416067251003608269155670169939298714932340681792964320736816780229044178506872246630707755230983492883448220501356700331277789286453937968949662078161499642705391278769760726986935689609881949665969826496251497367199781183749097405510344484863072593665616026336899836986753811748216543814974517696768384308433438780911444972507286950175006169641114186504781054688208475638072378857240190894026171091533023164636776622076541383535461373645433266960017712, 892981828661846332321659131807615282280249477711294253253212413777920838496107630318223579672083894894451935148389547503547492379933350788958914090212020896990868830058933307940724220011300125094751977989917675118676590520999572964161985725492919306105854057009614769320130210574771426801169567622970906956916221260001167254703017107277470541552616779804417224122473349816583186677922425367534380964350224736796114281220820190810624524117078723226422963776662392914521213014923544618770181340166706832771231307161784152627545274929195861551226576804165896592809867096124549284118089631057563126426027420260635919968, 3136815584136185635807064321692312569674722534451336769816955698632863825006376033909114660516675478293881837016011543435378497470537074166059107700628719140733508731950660902149256175030655145315849180090335217229219043866513155401389302414660680775143001901814114942946718341454196665483269935222368185050483440577580360831766520836680629122782954498807007338328873991851249106053098812265149607886640343923368978944598112025824715392087444295945894092890811776453173763690014310425575066099801556548994916981536395164171121627687746245490619554753957838628815099563661739687086864730572773664904486578210853730544, 2113062060486971598614660809305563033985764622474548122380308569428136017611053863445967297111404774763109484504122816753650308148998975953965996300691871728819200265785024367588746597604841258215094978690731600856826591231678263874561898505953097690205340731849405106170150998622505894050884895412495578847018238615636181770600587967592948829128913474368161180593558645409419538940006484549650446187200683981427963054612700627400579301620926123141956976585375762257508190263098544332224391721526676541428977528527512570658211073039259904803718682242768018991548930218521958455294442155555087117825490202925267777448]
p = 10900824353334471830007307529937357926160386461967884446160315218630687793341471079170750548554707926611542019859296605188535413447791710067186432371970369
y = 66072576851115053483753421610614541844018469811307289044376046636066283286015666113841366751467570398740267396323696543323500683730893697709530226067963607520757855845322501593037662830639871680870276932879716815543359805397965034010780176235355960215724048292101823589008019607937464768483480936490160615768
q = 8239835397208516111720362847949425401045672365829937602117480449316694558226622200110057535873802132963548914201468383545676262090246827792522994758916609
phi = (p-1)*(q-1)
r = 226148347
bounds = (1, r)
F = IntegerModRing(n)
result = []
x = F(pow(y,phi//r, n))
for c in clist:
a = F(pow(c,phi//r, n))
result.append(bsgs(x, a, bounds))
flag = ''
for m in result:
flag+=str(m)
long_to_bytes(flag)