XYCTF 2024 CRYPTO wp2

 声明:可能有些操作并非最优解,仅提供一种可行思路,勿喷。

 factor1

题目:

import gmpy2
import hashlib
from Crypto.Util.number import *

p = getPrime(512)
q = getPrime(512)
d = getPrime(512)
e = gmpy2.invert(d, (p**3 - 1) * (q**3 - 1))
flag = "XYCTF{" + hashlib.md5(str(p + q).encode()).hexdigest() + "}"
print(e)
print(p * q)
# 172005065945326769176157335849432320425605083524943730546805772515111751580759726759492349719668775270727323745284785341119685198468883978645793770975366048506237371435027612758232099414404389043740306443065413069994232238075194102578269859784981454218948784071599231415554297361219709787507633404217550013282713899284609273532223781487419770338416653260109238572639243087280632577902857385265070736208291583497988891353312351322545840742380550393294960815728021248513046077985900158814037534487146730483099151396746751774427787635287611736111679074330407715700153025952858666841328055071403960165321273972935204988906850585454805923440635864200149694398767776539993952528995717480620593326867245714074205285828967234591508039849777840636255379730281105670496110061909219669860172557450779495125345533232776767292561378244884362014224844319802810586344516400297830227894063759083198761120293919537342405893653545157892446163
# 99075185389443078008327214328328747792385153883836599753096971412377366865826254033534293886034828804219037466246175526347014045811852531994537520303063113985486063022444972761276531422538694915030159420989401280012025249129111871649831185047820236417385693285461420040134313833571949090757635806658958193793

 观察题目,除p,q,e,d之外没有其他关于flag的信息,即需要求出p+q的值再代入flag生成式。已知p*q,e,而e是由p,q的信息生成的,因此将e视作密文,先处理p*q。知道乘法逆元的结果和与模数相关的信息求模数,可以使用连分数求解p+q。在网上找的求解模版。


def transform(x, y):  
    res = []
    while y:
        res.append(x // y)
        x, y = y, x % y
    return res

def continued_fraction(sub_res):
    numerator, denominator = 1, 0
    for i in sub_res[::-1]:  
        denominator, numerator = numerator, i * numerator + denominator
    return denominator, numerator  

def sub_fraction(x, y):
    res = transform(x, y)
    res = list(map(continued_fraction, (res[0:i] for i in range(1, len(res)))))  
    return res

def wienerAttack(e, n):
    for (d, k) in sub_fraction(e, pow(n,3)):  
        if k == 0:  
            continue
        if (e * d - 1) % k != 0: 
            continue
        phi = (e * d - 1) // k  
        print(phi)





e = 172005065945326769176157335849432320425605083524943730546805772515111751580759726759492349719668775270727323745284785341119685198468883978645793770975366048506237371435027612758232099414404389043740306443065413069994232238075194102578269859784981454218948784071599231415554297361219709787507633404217550013282713899284609273532223781487419770338416653260109238572639243087280632577902857385265070736208291583497988891353312351322545840742380550393294960815728021248513046077985900158814037534487146730483099151396746751774427787635287611736111679074330407715700153025952858666841328055071403960165321273972935204988906850585454805923440635864200149694398767776539993952528995717480620593326867245714074205285828967234591508039849777840636255379730281105670496110061909219669860172557450779495125345533232776767292561378244884362014224844319802810586344516400297830227894063759083198761120293919537342405893653545157892446163
n = 99075185389443078008327214328328747792385153883836599753096971412377366865826254033534293886034828804219037466246175526347014045811852531994537520303063113985486063022444972761276531422538694915030159420989401280012025249129111871649831185047820236417385693285461420040134313833571949090757635806658958193793
t=wienerAttack(e, n)
#860025329726633845880786679247161602128025417624718652734028862575558757903798633797461748598343876353636618726423926705598425992344419893228968854876830242531186857175138063791160497072021945218701532215327065349971161190375970512891349298924907271094743920357996157077771486806098548937538167021087750066413569496423046367661118907437098851692083266300546192863196215436403162889514286926325353681041457917489944456766561756612729203711902751966474804078640106242565230389929500794070187672435733652415495756983733758872138938176438058680558395371652038578500765129764293334206640275357019800826606369864676024944534252927274029617203179321000748471993838882699969762644978587403102966634336228570371026429144836172957540199248889203181276898651405528352480550309546098349300862787253897475626727666163883836462806891224421810071124221599014052931722582001489151139470318795415993805601469597686712029468267725789462230814
#1032030395671960615056944015096593922553630501149662383280834635090670509484558360556954098318012651624363942471708712046718111190813303871874762625852196291037424228610165676549392596486426334262441838658392478419965393428451164615469619158709888725313692704429595388493325784167318258725045800425305300079696283395707655641193342688924518622030499919560655431435835458523683795467417144311590424417249749500987933348119874107935275044454283302359769764894368127491078276467915400952884225206922880382898594908380480510646566725811725670416670074445982446294200918155717152001047968330428423760991927643837611229933441103512728835540643815185200898166392606659239963715173974304883723559961203474284445231714973803407549048239098667043817532278381686634022976660371455318019161035344704676970752073199396660603755368269469306172085349065918816863518067098401786981367364382554499192566721763517224054435361921270947354676977
#946027862699297230468865347171877762340827959387190518007431748833114633694178497177207923458178263989000280599066319376158268591578861882551865740364513266784305542892651870170276546779224139740571685436859771884968277309413567564180484228817397998204218312393795772785548635486708403831291983723196525073054926446065351004427230798180808736861291592930600812149515836980043479178465715618957889049145603709238938902443217932274002124083093027163122284486504116866821753428922450873477206439679307017657045332682107134759352831994081864548614234908817242436350841642740722667627304302892721780909267006851143627438987678220001432578923497253100823319193222770969966738909476446143413263297769851427408129072059319790253294219173778123499404588516546081187728605340500708184230949065979287223189400432780272220109087580346863991078236643758915458224894840201638066253417350674957593186161616557455383232415094498368408453896
#972511355325113364052631731298241810108224336674853638392467496531221801463760422905081649486798893513235333261259026447362914449581968126150102058615785246984679107185088051540510676300698365173661664885922445984655201183939191294572815083110772280365015589954234618105130449050794187936653858911777331129374894613360180493778922390477471639230901499329286970066470938409172561402078020835704490763798033121327637376099345951393869066421256289755264836484293517455899841236893445058111156336783915080237891217097045326088433225353906745033086359517592587665091898519726306522216078946862525938605393095583476688928534868739031136603910653270126346663043777160589940969589929595662661998764846989622496897301967409430643458710968400436993966533764128546870219134569546167184537791250407432987498639475713973006971493363603598769092342912760402244358599858957999731973699418392072577594301810589012112435730728238977588777556

出现了四个值,没办法,只能每个都当目标值(p**3 - 1) * (q**3 - 1)试一下。解方程求p+q

import sympy
n = 99075185389443078008327214328328747792385153883836599753096971412377366865826254033534293886034828804219037466246175526347014045811852531994537520303063113985486063022444972761276531422538694915030159420989401280012025249129111871649831185047820236417385693285461420040134313833571949090757635806658958193793
t=[860025329726633845880786679247161602128025417624718652734028862575558757903798633797461748598343876353636618726423926705598425992344419893228968854876830242531186857175138063791160497072021945218701532215327065349971161190375970512891349298924907271094743920357996157077771486806098548937538167021087750066413569496423046367661118907437098851692083266300546192863196215436403162889514286926325353681041457917489944456766561756612729203711902751966474804078640106242565230389929500794070187672435733652415495756983733758872138938176438058680558395371652038578500765129764293334206640275357019800826606369864676024944534252927274029617203179321000748471993838882699969762644978587403102966634336228570371026429144836172957540199248889203181276898651405528352480550309546098349300862787253897475626727666163883836462806891224421810071124221599014052931722582001489151139470318795415993805601469597686712029468267725789462230814,1032030395671960615056944015096593922553630501149662383280834635090670509484558360556954098318012651624363942471708712046718111190813303871874762625852196291037424228610165676549392596486426334262441838658392478419965393428451164615469619158709888725313692704429595388493325784167318258725045800425305300079696283395707655641193342688924518622030499919560655431435835458523683795467417144311590424417249749500987933348119874107935275044454283302359769764894368127491078276467915400952884225206922880382898594908380480510646566725811725670416670074445982446294200918155717152001047968330428423760991927643837611229933441103512728835540643815185200898166392606659239963715173974304883723559961203474284445231714973803407549048239098667043817532278381686634022976660371455318019161035344704676970752073199396660603755368269469306172085349065918816863518067098401786981367364382554499192566721763517224054435361921270947354676977,946027862699297230468865347171877762340827959387190518007431748833114633694178497177207923458178263989000280599066319376158268591578861882551865740364513266784305542892651870170276546779224139740571685436859771884968277309413567564180484228817397998204218312393795772785548635486708403831291983723196525073054926446065351004427230798180808736861291592930600812149515836980043479178465715618957889049145603709238938902443217932274002124083093027163122284486504116866821753428922450873477206439679307017657045332682107134759352831994081864548614234908817242436350841642740722667627304302892721780909267006851143627438987678220001432578923497253100823319193222770969966738909476446143413263297769851427408129072059319790253294219173778123499404588516546081187728605340500708184230949065979287223189400432780272220109087580346863991078236643758915458224894840201638066253417350674957593186161616557455383232415094498368408453896,972511355325113364052631731298241810108224336674853638392467496531221801463760422905081649486798893513235333261259026447362914449581968126150102058615785246984679107185088051540510676300698365173661664885922445984655201183939191294572815083110772280365015589954234618105130449050794187936653858911777331129374894613360180493778922390477471639230901499329286970066470938409172561402078020835704490763798033121327637376099345951393869066421256289755264836484293517455899841236893445058111156336783915080237891217097045326088433225353906745033086359517592587665091898519726306522216078946862525938605393095583476688928534868739031136603910653270126346663043777160589940969589929595662661998764846989622496897301967409430643458710968400436993966533764128546870219134569546167184537791250407432987498639475713973006971493363603598769092342912760402244358599858957999731973699418392072577594301810589012112435730728238977588777556]
for t in t:
  x=sympy.Symbol('x')
  f=-x**3+3*n*x+1+n**3-t
  x=sympy.solve(f,x)
  print(x)
#[(-1/2 - sqrt(3)*I/2)*(56243012799239759085922526025540103990099459525067492829219316977831521779980894553809950444227508579799357267417549870882244228618774116460566601869477502226746125004974993874675089614338209977480066335297690317342019996781610390840732892092932504635135834798119230513679481122347819499557845945344790531480662558468567063058901741520186393769409116514370388601637361486384699256281866954689568541378287601918846459666392097390569931354676768894395016202826706619551245369536261384055404350734120913811404590514850242193509578931302617692193787433943422756500932238911477679706637307420651105840016161118634286606928149445624271383286721033856613210120310411048754686005518842698272132397475094507545011657240359725634605447194037837942277965552295731069329811109436496424244586252338814949812211495979791492577136526046513996878021418519752124708768254066219387606850783503919618531434047827981660316026586974568768508722 + sqrt(3163276488735447361077491828373007744423305160897447932614132865033127087985671339302446443706744080844376985446746324019531729419986293451346714936869968307134981795965968043407292232350341285962768828072007861615994932436067969452020858113675148805925219917291938429785590817582274251795679003907294085264566120067127878837551634165664938836100008814848540459038808648026456159000742885033989689707743178884219758031538346347913438984487318549223505260856050022876620027189547162796747120224688007188778170939787685299799682923543779509662856083546166945790667093320362995506798889683739598683242424871256712139976395584779448063155039942670452649381379037231654360732802936220929007965618282057689116371206163287741629409122110808493375843412981844627558472185034217821341841452447204534467685722483046040432692055030793110659771063244055305343253231262654777397807941164105450897738164259167276632265593973980693360775141720998535232348505781536300608291125993837964445746871386670015831142260589257105871616718979471422441597443803912254702213315172426663096960893578567058028902305904190569424692888030968074080975578559616392849618665571771121282119982940932328567966827005014012629993379573394565880231607931387839776119154564648548167444951831088856717665376040477808360915834758493152501452053472313897550637695262934650999967577214985108981988266883341420241669080026157493686341498395246518527268599382604929883149600841990277500256080024670650871551508428658955154774908426489793539961729370476529950364902671929828911915857228563201676667425826300649947177918962939096085724064059270804707657491290904753426134932874696273390380638090295532115925432329363031427566092971082027336209303842130327945303281436963873623501515589259017078786411818712264955388225698089385397370207940726606292502163189112156844863072797349294920790825027))**(1/3) + 99075185389443078008327214328328747792385153883836599753096971412377366865826254033534293886034828804219037466246175526347014045811852531994537520303063113985486063022444972761276531422538694915030159420989401280012025249129111871649831185047820236417385693285461420040134313833571949090757635806658958193793/((-1/2 - sqrt(3)*I/2)*(56243012799239759085922526025540103990099459525067492829219316977831521779980894553809950444227508579799357267417549870882244228618774116460566601869477502226746125004974993874675089614338209977480066335297690317342019996781610390840732892092932504635135834798119230513679481122347819499557845945344790531480662558468567063058901741520186393769409116514370388601637361486384699256281866954689568541378287601918846459666392097390569931354676768894395016202826706619551245369536261384055404350734120913811404590514850242193509578931302617692193787433943422756500932238911477679706637307420651105840016161118634286606928149445624271383286721033856613210120310411048754686005518842698272132397475094507545011657240359725634605447194037837942277965552295731069329811109436496424244586252338814949812211495979791492577136526046513996878021418519752124708768254066219387606850783503919618531434047827981660316026586974568768508722 + sqrt(3163276488735447361077491828373007744423305160897447932614132865033127087985671339302446443706744080844376985446746324019531729419986293451346714936869968307134981795965968043407292232350341285962768828072007861615994932436067969452020858113675148805925219917291938429785590817582274251795679003907294085264566120067127878837551634165664938836100008814848540459038808648026456159000742885033989689707743178884219758031538346347913438984487318549223505260856050022876620027189547162796747120224688007188778170939787685299799682923543779509662856083546166945790667093320362995506798889683739598683242424871256712139976395584779448063155039942670452649381379037231654360732802936220929007965618282057689116371206163287741629409122110808493375843412981844627558472185034217821341841452447204534467685722483046040432692055030793110659771063244055305343253231262654777397807941164105450897738164259167276632265593973980693360775141720998535232348505781536300608291125993837964445746871386670015831142260589257105871616718979471422441597443803912254702213315172426663096960893578567058028902305904190569424692888030968074080975578559616392849618665571771121282119982940932328567966827005014012629993379573394565880231607931387839776119154564648548167444951831088856717665376040477808360915834758493152501452053472313897550637695262934650999967577214985108981988266883341420241669080026157493686341498395246518527268599382604929883149600841990277500256080024670650871551508428658955154774908426489793539961729370476529950364902671929828911915857228563201676667425826300649947177918962939096085724064059270804707657491290904753426134932874696273390380638090295532115925432329363031427566092971082027336209303842130327945303281436963873623501515589259017078786411818712264955388225698089385397370207940726606292502163189112156844863072797349294920790825027))**(1/3)), 99075185389443078008327214328328747792385153883836599753096971412377366865826254033534293886034828804219037466246175526347014045811852531994537520303063113985486063022444972761276531422538694915030159420989401280012025249129111871649831185047820236417385693285461420040134313833571949090757635806658958193793/((-1/2 + sqrt(3)*I/2)*(56243012799239759085922526025540103990099459525067492829219316977831521779980894553809950444227508579799357267417549870882244228618774116460566601869477502226746125004974993874675089614338209977480066335297690317342019996781610390840732892092932504635135834798119230513679481122347819499557845945344790531480662558468567063058901741520186393769409116514370388601637361486384699256281866954689568541378287601918846459666392097390569931354676768894395016202826706619551245369536261384055404350734120913811404590514850242193509578931302617692193787433943422756500932238911477679706637307420651105840016161118634286606928149445624271383286721033856613210120310411048754686005518842698272132397475094507545011657240359725634605447194037837942277965552295731069329811109436496424244586252338814949812211495979791492577136526046513996878021418519752124708768254066219387606850783503919618531434047827981660316026586974568768508722 + sqrt(3163276488735447361077491828373007744423305160897447932614132865033127087985671339302446443706744080844376985446746324019531729419986293451346714936869968307134981795965968043407292232350341285962768828072007861615994932436067969452020858113675148805925219917291938429785590817582274251795679003907294085264566120067127878837551634165664938836100008814848540459038808648026456159000742885033989689707743178884219758031538346347913438984487318549223505260856050022876620027189547162796747120224688007188778170939787685299799682923543779509662856083546166945790667093320362995506798889683739598683242424871256712139976395584779448063155039942670452649381379037231654360732802936220929007965618282057689116371206163287741629409122110808493375843412981844627558472185034217821341841452447204534467685722483046040432692055030793110659771063244055305343253231262654777397807941164105450897738164259167276632265593973980693360775141720998535232348505781536300608291125993837964445746871386670015831142260589257105871616718979471422441597443803912254702213315172426663096960893578567058028902305904190569424692888030968074080975578559616392849618665571771121282119982940932328567966827005014012629993379573394565880231607931387839776119154564648548167444951831088856717665376040477808360915834758493152501452053472313897550637695262934650999967577214985108981988266883341420241669080026157493686341498395246518527268599382604929883149600841990277500256080024670650871551508428658955154774908426489793539961729370476529950364902671929828911915857228563201676667425826300649947177918962939096085724064059270804707657491290904753426134932874696273390380638090295532115925432329363031427566092971082027336209303842130327945303281436963873623501515589259017078786411818712264955388225698089385397370207940726606292502163189112156844863072797349294920790825027))**(1/3)) + (-1/2 + sqrt(3)*I/2)*(56243012799239759085922526025540103990099459525067492829219316977831521779980894553809950444227508579799357267417549870882244228618774116460566601869477502226746125004974993874675089614338209977480066335297690317342019996781610390840732892092932504635135834798119230513679481122347819499557845945344790531480662558468567063058901741520186393769409116514370388601637361486384699256281866954689568541378287601918846459666392097390569931354676768894395016202826706619551245369536261384055404350734120913811404590514850242193509578931302617692193787433943422756500932238911477679706637307420651105840016161118634286606928149445624271383286721033856613210120310411048754686005518842698272132397475094507545011657240359725634605447194037837942277965552295731069329811109436496424244586252338814949812211495979791492577136526046513996878021418519752124708768254066219387606850783503919618531434047827981660316026586974568768508722 + sqrt(3163276488735447361077491828373007744423305160897447932614132865033127087985671339302446443706744080844376985446746324019531729419986293451346714936869968307134981795965968043407292232350341285962768828072007861615994932436067969452020858113675148805925219917291938429785590817582274251795679003907294085264566120067127878837551634165664938836100008814848540459038808648026456159000742885033989689707743178884219758031538346347913438984487318549223505260856050022876620027189547162796747120224688007188778170939787685299799682923543779509662856083546166945790667093320362995506798889683739598683242424871256712139976395584779448063155039942670452649381379037231654360732802936220929007965618282057689116371206163287741629409122110808493375843412981844627558472185034217821341841452447204534467685722483046040432692055030793110659771063244055305343253231262654777397807941164105450897738164259167276632265593973980693360775141720998535232348505781536300608291125993837964445746871386670015831142260589257105871616718979471422441597443803912254702213315172426663096960893578567058028902305904190569424692888030968074080975578559616392849618665571771121282119982940932328567966827005014012629993379573394565880231607931387839776119154564648548167444951831088856717665376040477808360915834758493152501452053472313897550637695262934650999967577214985108981988266883341420241669080026157493686341498395246518527268599382604929883149600841990277500256080024670650871551508428658955154774908426489793539961729370476529950364902671929828911915857228563201676667425826300649947177918962939096085724064059270804707657491290904753426134932874696273390380638090295532115925432329363031427566092971082027336209303842130327945303281436963873623501515589259017078786411818712264955388225698089385397370207940726606292502163189112156844863072797349294920790825027))**(1/3), 99075185389443078008327214328328747792385153883836599753096971412377366865826254033534293886034828804219037466246175526347014045811852531994537520303063113985486063022444972761276531422538694915030159420989401280012025249129111871649831185047820236417385693285461420040134313833571949090757635806658958193793/(56243012799239759085922526025540103990099459525067492829219316977831521779980894553809950444227508579799357267417549870882244228618774116460566601869477502226746125004974993874675089614338209977480066335297690317342019996781610390840732892092932504635135834798119230513679481122347819499557845945344790531480662558468567063058901741520186393769409116514370388601637361486384699256281866954689568541378287601918846459666392097390569931354676768894395016202826706619551245369536261384055404350734120913811404590514850242193509578931302617692193787433943422756500932238911477679706637307420651105840016161118634286606928149445624271383286721033856613210120310411048754686005518842698272132397475094507545011657240359725634605447194037837942277965552295731069329811109436496424244586252338814949812211495979791492577136526046513996878021418519752124708768254066219387606850783503919618531434047827981660316026586974568768508722 + sqrt(3163276488735447361077491828373007744423305160897447932614132865033127087985671339302446443706744080844376985446746324019531729419986293451346714936869968307134981795965968043407292232350341285962768828072007861615994932436067969452020858113675148805925219917291938429785590817582274251795679003907294085264566120067127878837551634165664938836100008814848540459038808648026456159000742885033989689707743178884219758031538346347913438984487318549223505260856050022876620027189547162796747120224688007188778170939787685299799682923543779509662856083546166945790667093320362995506798889683739598683242424871256712139976395584779448063155039942670452649381379037231654360732802936220929007965618282057689116371206163287741629409122110808493375843412981844627558472185034217821341841452447204534467685722483046040432692055030793110659771063244055305343253231262654777397807941164105450897738164259167276632265593973980693360775141720998535232348505781536300608291125993837964445746871386670015831142260589257105871616718979471422441597443803912254702213315172426663096960893578567058028902305904190569424692888030968074080975578559616392849618665571771121282119982940932328567966827005014012629993379573394565880231607931387839776119154564648548167444951831088856717665376040477808360915834758493152501452053472313897550637695262934650999967577214985108981988266883341420241669080026157493686341498395246518527268599382604929883149600841990277500256080024670650871551508428658955154774908426489793539961729370476529950364902671929828911915857228563201676667425826300649947177918962939096085724064059270804707657491290904753426134932874696273390380638090295532115925432329363031427566092971082027336209303842130327945303281436963873623501515589259017078786411818712264955388225698089385397370207940726606292502163189112156844863072797349294920790825027))**(1/3) + (56243012799239759085922526025540103990099459525067492829219316977831521779980894553809950444227508579799357267417549870882244228618774116460566601869477502226746125004974993874675089614338209977480066335297690317342019996781610390840732892092932504635135834798119230513679481122347819499557845945344790531480662558468567063058901741520186393769409116514370388601637361486384699256281866954689568541378287601918846459666392097390569931354676768894395016202826706619551245369536261384055404350734120913811404590514850242193509578931302617692193787433943422756500932238911477679706637307420651105840016161118634286606928149445624271383286721033856613210120310411048754686005518842698272132397475094507545011657240359725634605447194037837942277965552295731069329811109436496424244586252338814949812211495979791492577136526046513996878021418519752124708768254066219387606850783503919618531434047827981660316026586974568768508722 + sqrt(3163276488735447361077491828373007744423305160897447932614132865033127087985671339302446443706744080844376985446746324019531729419986293451346714936869968307134981795965968043407292232350341285962768828072007861615994932436067969452020858113675148805925219917291938429785590817582274251795679003907294085264566120067127878837551634165664938836100008814848540459038808648026456159000742885033989689707743178884219758031538346347913438984487318549223505260856050022876620027189547162796747120224688007188778170939787685299799682923543779509662856083546166945790667093320362995506798889683739598683242424871256712139976395584779448063155039942670452649381379037231654360732802936220929007965618282057689116371206163287741629409122110808493375843412981844627558472185034217821341841452447204534467685722483046040432692055030793110659771063244055305343253231262654777397807941164105450897738164259167276632265593973980693360775141720998535232348505781536300608291125993837964445746871386670015831142260589257105871616718979471422441597443803912254702213315172426663096960893578567058028902305904190569424692888030968074080975578559616392849618665571771121282119982940932328567966827005014012629993379573394565880231607931387839776119154564648548167444951831088856717665376040477808360915834758493152501452053472313897550637695262934650999967577214985108981988266883341420241669080026157493686341498395246518527268599382604929883149600841990277500256080024670650871551508428658955154774908426489793539961729370476529950364902671929828911915857228563201676667425826300649947177918962939096085724064059270804707657491290904753426134932874696273390380638090295532115925432329363031427566092971082027336209303842130327945303281436963873623501515589259017078786411818712264955388225698089385397370207940726606292502163189112156844863072797349294920790825027))**(1/3)]
#[-297225556168329234024981642984986243377155461651509799259290914237132100597478762100602881658104486412657112398738526579041042137435557595983612560909189341956458189067334918283829594267616084745090478262968203840036075747387335614949493555143460709252157079856384260120402941500715847272272907419976874581379/((-1/2 - sqrt(3)*I/2)*(1607014089364875777116431662555507036025966440819836111985912741105115116561544316600556118442771469000472448682141511182590312013246065134565835315383098189424118278477095875239811845014655165397064691856690875753375190601823279664213710041176144013614282090834740800481274048146149911286582420865255161658677497123381828980189348058070268535589157346246948456972842043091803319764156333848920208643196342250827991244554260226617961406891729340321633067072014416254084994150661189548987178491510432377227829199910249219460033003862424161496550813573976179472853790799507389300557442886212747209102801696862999057926364895743569105235414232505146928402269967769947083673984866866270060870361760530872572913226402690149702022927465958448295885112893620375359585171761978124177017001424875039078524908614376232117733784806100121942970914196568061151557816223232194485383197412283586965852809353116498587893692949092549596575413/2 + 27*sqrt(3542516163809630933134421513019351191444387494267002934194504648153919606057556397361144236621541030023269438056951114628412881973566590669994669608817774779460863107916419453897276979103857365698543598971128287541441263775209161395758482376521388345805385528305543377617926811717874141319186549907080376897122555270667719998865309422123561948669015603736801074767239453518192328818904251033146137018220798438563749080018835413599378540942704874414925349276373667139200227803847955531785832622656671113636199984522850618433073616675851823446686540420822036880896164655787852905714314453768268455365781709387952312528414619778038078519183939240967340722552334254218498158174735913318575226907927047236334542601101739358260401072991933692719114706540467281744701259501140731773009344872470192856151083028556629272820928810788488199369785648848882058895233553934465462021212782012553428193036795634909192118895844680966099495269566189498174667832803625600553578589506540899409331815306843238096644169611736207050155021808279485893924772530494202568744335091035805799510817039159314846962303655267427341827599771610644562675581703067666248217828038889443402216466734345958582320674890513363965883508925177640082807386530997762521549887985123632584474709990993222950149474519609114001175538719178434727555895226849973150973860301646759325504710501549422079004724284580114931851541409589760596114413967373375273774292388208750817503640779619243387694667692281577708596461815547258767334221566711375470537698036255050250566639665107677511080927689561002649189985348181061128291378455912650932602963607153829253394728738685126074449486964857997106137407283465275439690187138542052269417833468278007454628987542381308270031253815601202471790322103154015086186576536885722886914032529628068005813168508129882110895243488255072850727940632411826626292987933)/2)**(1/3)) - (-1/2 - sqrt(3)*I/2)*(1607014089364875777116431662555507036025966440819836111985912741105115116561544316600556118442771469000472448682141511182590312013246065134565835315383098189424118278477095875239811845014655165397064691856690875753375190601823279664213710041176144013614282090834740800481274048146149911286582420865255161658677497123381828980189348058070268535589157346246948456972842043091803319764156333848920208643196342250827991244554260226617961406891729340321633067072014416254084994150661189548987178491510432377227829199910249219460033003862424161496550813573976179472853790799507389300557442886212747209102801696862999057926364895743569105235414232505146928402269967769947083673984866866270060870361760530872572913226402690149702022927465958448295885112893620375359585171761978124177017001424875039078524908614376232117733784806100121942970914196568061151557816223232194485383197412283586965852809353116498587893692949092549596575413/2 + 27*sqrt(3542516163809630933134421513019351191444387494267002934194504648153919606057556397361144236621541030023269438056951114628412881973566590669994669608817774779460863107916419453897276979103857365698543598971128287541441263775209161395758482376521388345805385528305543377617926811717874141319186549907080376897122555270667719998865309422123561948669015603736801074767239453518192328818904251033146137018220798438563749080018835413599378540942704874414925349276373667139200227803847955531785832622656671113636199984522850618433073616675851823446686540420822036880896164655787852905714314453768268455365781709387952312528414619778038078519183939240967340722552334254218498158174735913318575226907927047236334542601101739358260401072991933692719114706540467281744701259501140731773009344872470192856151083028556629272820928810788488199369785648848882058895233553934465462021212782012553428193036795634909192118895844680966099495269566189498174667832803625600553578589506540899409331815306843238096644169611736207050155021808279485893924772530494202568744335091035805799510817039159314846962303655267427341827599771610644562675581703067666248217828038889443402216466734345958582320674890513363965883508925177640082807386530997762521549887985123632584474709990993222950149474519609114001175538719178434727555895226849973150973860301646759325504710501549422079004724284580114931851541409589760596114413967373375273774292388208750817503640779619243387694667692281577708596461815547258767334221566711375470537698036255050250566639665107677511080927689561002649189985348181061128291378455912650932602963607153829253394728738685126074449486964857997106137407283465275439690187138542052269417833468278007454628987542381308270031253815601202471790322103154015086186576536885722886914032529628068005813168508129882110895243488255072850727940632411826626292987933)/2)**(1/3)/3, -297225556168329234024981642984986243377155461651509799259290914237132100597478762100602881658104486412657112398738526579041042137435557595983612560909189341956458189067334918283829594267616084745090478262968203840036075747387335614949493555143460709252157079856384260120402941500715847272272907419976874581379/((-1/2 + sqrt(3)*I/2)*(1607014089364875777116431662555507036025966440819836111985912741105115116561544316600556118442771469000472448682141511182590312013246065134565835315383098189424118278477095875239811845014655165397064691856690875753375190601823279664213710041176144013614282090834740800481274048146149911286582420865255161658677497123381828980189348058070268535589157346246948456972842043091803319764156333848920208643196342250827991244554260226617961406891729340321633067072014416254084994150661189548987178491510432377227829199910249219460033003862424161496550813573976179472853790799507389300557442886212747209102801696862999057926364895743569105235414232505146928402269967769947083673984866866270060870361760530872572913226402690149702022927465958448295885112893620375359585171761978124177017001424875039078524908614376232117733784806100121942970914196568061151557816223232194485383197412283586965852809353116498587893692949092549596575413/2 + 27*sqrt(3542516163809630933134421513019351191444387494267002934194504648153919606057556397361144236621541030023269438056951114628412881973566590669994669608817774779460863107916419453897276979103857365698543598971128287541441263775209161395758482376521388345805385528305543377617926811717874141319186549907080376897122555270667719998865309422123561948669015603736801074767239453518192328818904251033146137018220798438563749080018835413599378540942704874414925349276373667139200227803847955531785832622656671113636199984522850618433073616675851823446686540420822036880896164655787852905714314453768268455365781709387952312528414619778038078519183939240967340722552334254218498158174735913318575226907927047236334542601101739358260401072991933692719114706540467281744701259501140731773009344872470192856151083028556629272820928810788488199369785648848882058895233553934465462021212782012553428193036795634909192118895844680966099495269566189498174667832803625600553578589506540899409331815306843238096644169611736207050155021808279485893924772530494202568744335091035805799510817039159314846962303655267427341827599771610644562675581703067666248217828038889443402216466734345958582320674890513363965883508925177640082807386530997762521549887985123632584474709990993222950149474519609114001175538719178434727555895226849973150973860301646759325504710501549422079004724284580114931851541409589760596114413967373375273774292388208750817503640779619243387694667692281577708596461815547258767334221566711375470537698036255050250566639665107677511080927689561002649189985348181061128291378455912650932602963607153829253394728738685126074449486964857997106137407283465275439690187138542052269417833468278007454628987542381308270031253815601202471790322103154015086186576536885722886914032529628068005813168508129882110895243488255072850727940632411826626292987933)/2)**(1/3)) - (-1/2 + sqrt(3)*I/2)*(1607014089364875777116431662555507036025966440819836111985912741105115116561544316600556118442771469000472448682141511182590312013246065134565835315383098189424118278477095875239811845014655165397064691856690875753375190601823279664213710041176144013614282090834740800481274048146149911286582420865255161658677497123381828980189348058070268535589157346246948456972842043091803319764156333848920208643196342250827991244554260226617961406891729340321633067072014416254084994150661189548987178491510432377227829199910249219460033003862424161496550813573976179472853790799507389300557442886212747209102801696862999057926364895743569105235414232505146928402269967769947083673984866866270060870361760530872572913226402690149702022927465958448295885112893620375359585171761978124177017001424875039078524908614376232117733784806100121942970914196568061151557816223232194485383197412283586965852809353116498587893692949092549596575413/2 + 27*sqrt(3542516163809630933134421513019351191444387494267002934194504648153919606057556397361144236621541030023269438056951114628412881973566590669994669608817774779460863107916419453897276979103857365698543598971128287541441263775209161395758482376521388345805385528305543377617926811717874141319186549907080376897122555270667719998865309422123561948669015603736801074767239453518192328818904251033146137018220798438563749080018835413599378540942704874414925349276373667139200227803847955531785832622656671113636199984522850618433073616675851823446686540420822036880896164655787852905714314453768268455365781709387952312528414619778038078519183939240967340722552334254218498158174735913318575226907927047236334542601101739358260401072991933692719114706540467281744701259501140731773009344872470192856151083028556629272820928810788488199369785648848882058895233553934465462021212782012553428193036795634909192118895844680966099495269566189498174667832803625600553578589506540899409331815306843238096644169611736207050155021808279485893924772530494202568744335091035805799510817039159314846962303655267427341827599771610644562675581703067666248217828038889443402216466734345958582320674890513363965883508925177640082807386530997762521549887985123632584474709990993222950149474519609114001175538719178434727555895226849973150973860301646759325504710501549422079004724284580114931851541409589760596114413967373375273774292388208750817503640779619243387694667692281577708596461815547258767334221566711375470537698036255050250566639665107677511080927689561002649189985348181061128291378455912650932602963607153829253394728738685126074449486964857997106137407283465275439690187138542052269417833468278007454628987542381308270031253815601202471790322103154015086186576536885722886914032529628068005813168508129882110895243488255072850727940632411826626292987933)/2)**(1/3)/3, -(1607014089364875777116431662555507036025966440819836111985912741105115116561544316600556118442771469000472448682141511182590312013246065134565835315383098189424118278477095875239811845014655165397064691856690875753375190601823279664213710041176144013614282090834740800481274048146149911286582420865255161658677497123381828980189348058070268535589157346246948456972842043091803319764156333848920208643196342250827991244554260226617961406891729340321633067072014416254084994150661189548987178491510432377227829199910249219460033003862424161496550813573976179472853790799507389300557442886212747209102801696862999057926364895743569105235414232505146928402269967769947083673984866866270060870361760530872572913226402690149702022927465958448295885112893620375359585171761978124177017001424875039078524908614376232117733784806100121942970914196568061151557816223232194485383197412283586965852809353116498587893692949092549596575413/2 + 27*sqrt(3542516163809630933134421513019351191444387494267002934194504648153919606057556397361144236621541030023269438056951114628412881973566590669994669608817774779460863107916419453897276979103857365698543598971128287541441263775209161395758482376521388345805385528305543377617926811717874141319186549907080376897122555270667719998865309422123561948669015603736801074767239453518192328818904251033146137018220798438563749080018835413599378540942704874414925349276373667139200227803847955531785832622656671113636199984522850618433073616675851823446686540420822036880896164655787852905714314453768268455365781709387952312528414619778038078519183939240967340722552334254218498158174735913318575226907927047236334542601101739358260401072991933692719114706540467281744701259501140731773009344872470192856151083028556629272820928810788488199369785648848882058895233553934465462021212782012553428193036795634909192118895844680966099495269566189498174667832803625600553578589506540899409331815306843238096644169611736207050155021808279485893924772530494202568744335091035805799510817039159314846962303655267427341827599771610644562675581703067666248217828038889443402216466734345958582320674890513363965883508925177640082807386530997762521549887985123632584474709990993222950149474519609114001175538719178434727555895226849973150973860301646759325504710501549422079004724284580114931851541409589760596114413967373375273774292388208750817503640779619243387694667692281577708596461815547258767334221566711375470537698036255050250566639665107677511080927689561002649189985348181061128291378455912650932602963607153829253394728738685126074449486964857997106137407283465275439690187138542052269417833468278007454628987542381308270031253815601202471790322103154015086186576536885722886914032529628068005813168508129882110895243488255072850727940632411826626292987933)/2)**(1/3)/3 - 297225556168329234024981642984986243377155461651509799259290914237132100597478762100602881658104486412657112398738526579041042137435557595983612560909189341956458189067334918283829594267616084745090478262968203840036075747387335614949493555143460709252157079856384260120402941500715847272272907419976874581379/(1607014089364875777116431662555507036025966440819836111985912741105115116561544316600556118442771469000472448682141511182590312013246065134565835315383098189424118278477095875239811845014655165397064691856690875753375190601823279664213710041176144013614282090834740800481274048146149911286582420865255161658677497123381828980189348058070268535589157346246948456972842043091803319764156333848920208643196342250827991244554260226617961406891729340321633067072014416254084994150661189548987178491510432377227829199910249219460033003862424161496550813573976179472853790799507389300557442886212747209102801696862999057926364895743569105235414232505146928402269967769947083673984866866270060870361760530872572913226402690149702022927465958448295885112893620375359585171761978124177017001424875039078524908614376232117733784806100121942970914196568061151557816223232194485383197412283586965852809353116498587893692949092549596575413/2 + 27*sqrt(3542516163809630933134421513019351191444387494267002934194504648153919606057556397361144236621541030023269438056951114628412881973566590669994669608817774779460863107916419453897276979103857365698543598971128287541441263775209161395758482376521388345805385528305543377617926811717874141319186549907080376897122555270667719998865309422123561948669015603736801074767239453518192328818904251033146137018220798438563749080018835413599378540942704874414925349276373667139200227803847955531785832622656671113636199984522850618433073616675851823446686540420822036880896164655787852905714314453768268455365781709387952312528414619778038078519183939240967340722552334254218498158174735913318575226907927047236334542601101739358260401072991933692719114706540467281744701259501140731773009344872470192856151083028556629272820928810788488199369785648848882058895233553934465462021212782012553428193036795634909192118895844680966099495269566189498174667832803625600553578589506540899409331815306843238096644169611736207050155021808279485893924772530494202568744335091035805799510817039159314846962303655267427341827599771610644562675581703067666248217828038889443402216466734345958582320674890513363965883508925177640082807386530997762521549887985123632584474709990993222950149474519609114001175538719178434727555895226849973150973860301646759325504710501549422079004724284580114931851541409589760596114413967373375273774292388208750817503640779619243387694667692281577708596461815547258767334221566711375470537698036255050250566639665107677511080927689561002649189985348181061128291378455912650932602963607153829253394728738685126074449486964857997106137407283465275439690187138542052269417833468278007454628987542381308270031253815601202471790322103154015086186576536885722886914032529628068005813168508129882110895243488255072850727940632411826626292987933)/2)**(1/3)]
#[(-1/2 - sqrt(3)*I/2)*(13241746312908066791883192063182023883698188643831560192517873849053583884790962863936863014310314762117526331096353535602322929001553121799118159125635990100186782146218090685117064760737112716544989724531337049843461937262811865196165427146687141080398638780219422659790906782042892052680937594290403028159984083647414744675845796148331451184804953199343078958477550714564541111806152608373300857326214706044349236828064009559933471169081631296071275998894701307422983850039786344351894967112334231190629802665663554249902632022480714758165867665360820827575893982423263012996305293652800115798685842625400485359701436799260569902426562067806575786520618466913756197873269913328116984065758283079026460335783117916986728437231593377783214120619725454651705783593959191506779543112976120076030875112671597300753996181485292906374465207439801422062182124966144930049877267564148818841153974348097324714553173588279295397181 + 2*sqrt(43835961353853595382440611343344375985098395091362937568335787244078320368382634072136874937570861925489509268523739666305904038593421273503781029195613774140453253904792202509660798440924680894525379285401379411866182644637816604420564273289577942059910893240159642288825039065567978889077221467087197780296563565993082074155711785726237636392004657772882279779518610436168955596288036754709842592157540488350512518467741842108928588315061755285832358620983392066137152961328725303349905199985893354387329841520079721054632334057516310738631119715413681050308552384111403349194087118188262358975993656121849097419118078142186113292660181749489466026458399417664727529790899869773301615315506616806494706950801775186241903974676207061561479218004259159215388022647091006777428632827698181996012611068080518015016222529127904790745056946088802010904697723153190082597292678159560645188522860394058672729378999663605577929806331193727611672578474210453425461580438629060580181637018492068243623804791219430131784665283902887592721129693005555633555705210296011661401793637812409228344524044721482828034650997237529663587391974845464832885676014955101296252506042809711077321591712865814524603781891002320840781394540761201946464729836058644185749301483513515144565309770916724966890506143328419508074640790052781360567370067738063664233318074006389140192080077112877201577569798205282164615218547739130622387667900778947916339129677879546499221927993003944781021617651259531110717571946743051072960422267311544055051412409519457611606590554758151019805601380979251572641575334698918632368566510104700985594930176716752627710487665719802965443145138186364734111366796329582450563435776685723480304241357485310077190440121612487226886510813763171267990700588785438624000905113547396663220582842692052518390945873708199113961956370547016891385874626))**(1/3) + 99075185389443078008327214328328747792385153883836599753096971412377366865826254033534293886034828804219037466246175526347014045811852531994537520303063113985486063022444972761276531422538694915030159420989401280012025249129111871649831185047820236417385693285461420040134313833571949090757635806658958193793/((-1/2 - sqrt(3)*I/2)*(13241746312908066791883192063182023883698188643831560192517873849053583884790962863936863014310314762117526331096353535602322929001553121799118159125635990100186782146218090685117064760737112716544989724531337049843461937262811865196165427146687141080398638780219422659790906782042892052680937594290403028159984083647414744675845796148331451184804953199343078958477550714564541111806152608373300857326214706044349236828064009559933471169081631296071275998894701307422983850039786344351894967112334231190629802665663554249902632022480714758165867665360820827575893982423263012996305293652800115798685842625400485359701436799260569902426562067806575786520618466913756197873269913328116984065758283079026460335783117916986728437231593377783214120619725454651705783593959191506779543112976120076030875112671597300753996181485292906374465207439801422062182124966144930049877267564148818841153974348097324714553173588279295397181 + 2*sqrt(43835961353853595382440611343344375985098395091362937568335787244078320368382634072136874937570861925489509268523739666305904038593421273503781029195613774140453253904792202509660798440924680894525379285401379411866182644637816604420564273289577942059910893240159642288825039065567978889077221467087197780296563565993082074155711785726237636392004657772882279779518610436168955596288036754709842592157540488350512518467741842108928588315061755285832358620983392066137152961328725303349905199985893354387329841520079721054632334057516310738631119715413681050308552384111403349194087118188262358975993656121849097419118078142186113292660181749489466026458399417664727529790899869773301615315506616806494706950801775186241903974676207061561479218004259159215388022647091006777428632827698181996012611068080518015016222529127904790745056946088802010904697723153190082597292678159560645188522860394058672729378999663605577929806331193727611672578474210453425461580438629060580181637018492068243623804791219430131784665283902887592721129693005555633555705210296011661401793637812409228344524044721482828034650997237529663587391974845464832885676014955101296252506042809711077321591712865814524603781891002320840781394540761201946464729836058644185749301483513515144565309770916724966890506143328419508074640790052781360567370067738063664233318074006389140192080077112877201577569798205282164615218547739130622387667900778947916339129677879546499221927993003944781021617651259531110717571946743051072960422267311544055051412409519457611606590554758151019805601380979251572641575334698918632368566510104700985594930176716752627710487665719802965443145138186364734111366796329582450563435776685723480304241357485310077190440121612487226886510813763171267990700588785438624000905113547396663220582842692052518390945873708199113961956370547016891385874626))**(1/3)), 99075185389443078008327214328328747792385153883836599753096971412377366865826254033534293886034828804219037466246175526347014045811852531994537520303063113985486063022444972761276531422538694915030159420989401280012025249129111871649831185047820236417385693285461420040134313833571949090757635806658958193793/((-1/2 + sqrt(3)*I/2)*(13241746312908066791883192063182023883698188643831560192517873849053583884790962863936863014310314762117526331096353535602322929001553121799118159125635990100186782146218090685117064760737112716544989724531337049843461937262811865196165427146687141080398638780219422659790906782042892052680937594290403028159984083647414744675845796148331451184804953199343078958477550714564541111806152608373300857326214706044349236828064009559933471169081631296071275998894701307422983850039786344351894967112334231190629802665663554249902632022480714758165867665360820827575893982423263012996305293652800115798685842625400485359701436799260569902426562067806575786520618466913756197873269913328116984065758283079026460335783117916986728437231593377783214120619725454651705783593959191506779543112976120076030875112671597300753996181485292906374465207439801422062182124966144930049877267564148818841153974348097324714553173588279295397181 + 2*sqrt(43835961353853595382440611343344375985098395091362937568335787244078320368382634072136874937570861925489509268523739666305904038593421273503781029195613774140453253904792202509660798440924680894525379285401379411866182644637816604420564273289577942059910893240159642288825039065567978889077221467087197780296563565993082074155711785726237636392004657772882279779518610436168955596288036754709842592157540488350512518467741842108928588315061755285832358620983392066137152961328725303349905199985893354387329841520079721054632334057516310738631119715413681050308552384111403349194087118188262358975993656121849097419118078142186113292660181749489466026458399417664727529790899869773301615315506616806494706950801775186241903974676207061561479218004259159215388022647091006777428632827698181996012611068080518015016222529127904790745056946088802010904697723153190082597292678159560645188522860394058672729378999663605577929806331193727611672578474210453425461580438629060580181637018492068243623804791219430131784665283902887592721129693005555633555705210296011661401793637812409228344524044721482828034650997237529663587391974845464832885676014955101296252506042809711077321591712865814524603781891002320840781394540761201946464729836058644185749301483513515144565309770916724966890506143328419508074640790052781360567370067738063664233318074006389140192080077112877201577569798205282164615218547739130622387667900778947916339129677879546499221927993003944781021617651259531110717571946743051072960422267311544055051412409519457611606590554758151019805601380979251572641575334698918632368566510104700985594930176716752627710487665719802965443145138186364734111366796329582450563435776685723480304241357485310077190440121612487226886510813763171267990700588785438624000905113547396663220582842692052518390945873708199113961956370547016891385874626))**(1/3)) + (-1/2 + sqrt(3)*I/2)*(13241746312908066791883192063182023883698188643831560192517873849053583884790962863936863014310314762117526331096353535602322929001553121799118159125635990100186782146218090685117064760737112716544989724531337049843461937262811865196165427146687141080398638780219422659790906782042892052680937594290403028159984083647414744675845796148331451184804953199343078958477550714564541111806152608373300857326214706044349236828064009559933471169081631296071275998894701307422983850039786344351894967112334231190629802665663554249902632022480714758165867665360820827575893982423263012996305293652800115798685842625400485359701436799260569902426562067806575786520618466913756197873269913328116984065758283079026460335783117916986728437231593377783214120619725454651705783593959191506779543112976120076030875112671597300753996181485292906374465207439801422062182124966144930049877267564148818841153974348097324714553173588279295397181 + 2*sqrt(43835961353853595382440611343344375985098395091362937568335787244078320368382634072136874937570861925489509268523739666305904038593421273503781029195613774140453253904792202509660798440924680894525379285401379411866182644637816604420564273289577942059910893240159642288825039065567978889077221467087197780296563565993082074155711785726237636392004657772882279779518610436168955596288036754709842592157540488350512518467741842108928588315061755285832358620983392066137152961328725303349905199985893354387329841520079721054632334057516310738631119715413681050308552384111403349194087118188262358975993656121849097419118078142186113292660181749489466026458399417664727529790899869773301615315506616806494706950801775186241903974676207061561479218004259159215388022647091006777428632827698181996012611068080518015016222529127904790745056946088802010904697723153190082597292678159560645188522860394058672729378999663605577929806331193727611672578474210453425461580438629060580181637018492068243623804791219430131784665283902887592721129693005555633555705210296011661401793637812409228344524044721482828034650997237529663587391974845464832885676014955101296252506042809711077321591712865814524603781891002320840781394540761201946464729836058644185749301483513515144565309770916724966890506143328419508074640790052781360567370067738063664233318074006389140192080077112877201577569798205282164615218547739130622387667900778947916339129677879546499221927993003944781021617651259531110717571946743051072960422267311544055051412409519457611606590554758151019805601380979251572641575334698918632368566510104700985594930176716752627710487665719802965443145138186364734111366796329582450563435776685723480304241357485310077190440121612487226886510813763171267990700588785438624000905113547396663220582842692052518390945873708199113961956370547016891385874626))**(1/3), 99075185389443078008327214328328747792385153883836599753096971412377366865826254033534293886034828804219037466246175526347014045811852531994537520303063113985486063022444972761276531422538694915030159420989401280012025249129111871649831185047820236417385693285461420040134313833571949090757635806658958193793/(13241746312908066791883192063182023883698188643831560192517873849053583884790962863936863014310314762117526331096353535602322929001553121799118159125635990100186782146218090685117064760737112716544989724531337049843461937262811865196165427146687141080398638780219422659790906782042892052680937594290403028159984083647414744675845796148331451184804953199343078958477550714564541111806152608373300857326214706044349236828064009559933471169081631296071275998894701307422983850039786344351894967112334231190629802665663554249902632022480714758165867665360820827575893982423263012996305293652800115798685842625400485359701436799260569902426562067806575786520618466913756197873269913328116984065758283079026460335783117916986728437231593377783214120619725454651705783593959191506779543112976120076030875112671597300753996181485292906374465207439801422062182124966144930049877267564148818841153974348097324714553173588279295397181 + 2*sqrt(43835961353853595382440611343344375985098395091362937568335787244078320368382634072136874937570861925489509268523739666305904038593421273503781029195613774140453253904792202509660798440924680894525379285401379411866182644637816604420564273289577942059910893240159642288825039065567978889077221467087197780296563565993082074155711785726237636392004657772882279779518610436168955596288036754709842592157540488350512518467741842108928588315061755285832358620983392066137152961328725303349905199985893354387329841520079721054632334057516310738631119715413681050308552384111403349194087118188262358975993656121849097419118078142186113292660181749489466026458399417664727529790899869773301615315506616806494706950801775186241903974676207061561479218004259159215388022647091006777428632827698181996012611068080518015016222529127904790745056946088802010904697723153190082597292678159560645188522860394058672729378999663605577929806331193727611672578474210453425461580438629060580181637018492068243623804791219430131784665283902887592721129693005555633555705210296011661401793637812409228344524044721482828034650997237529663587391974845464832885676014955101296252506042809711077321591712865814524603781891002320840781394540761201946464729836058644185749301483513515144565309770916724966890506143328419508074640790052781360567370067738063664233318074006389140192080077112877201577569798205282164615218547739130622387667900778947916339129677879546499221927993003944781021617651259531110717571946743051072960422267311544055051412409519457611606590554758151019805601380979251572641575334698918632368566510104700985594930176716752627710487665719802965443145138186364734111366796329582450563435776685723480304241357485310077190440121612487226886510813763171267990700588785438624000905113547396663220582842692052518390945873708199113961956370547016891385874626))**(1/3) + (13241746312908066791883192063182023883698188643831560192517873849053583884790962863936863014310314762117526331096353535602322929001553121799118159125635990100186782146218090685117064760737112716544989724531337049843461937262811865196165427146687141080398638780219422659790906782042892052680937594290403028159984083647414744675845796148331451184804953199343078958477550714564541111806152608373300857326214706044349236828064009559933471169081631296071275998894701307422983850039786344351894967112334231190629802665663554249902632022480714758165867665360820827575893982423263012996305293652800115798685842625400485359701436799260569902426562067806575786520618466913756197873269913328116984065758283079026460335783117916986728437231593377783214120619725454651705783593959191506779543112976120076030875112671597300753996181485292906374465207439801422062182124966144930049877267564148818841153974348097324714553173588279295397181 + 2*sqrt(43835961353853595382440611343344375985098395091362937568335787244078320368382634072136874937570861925489509268523739666305904038593421273503781029195613774140453253904792202509660798440924680894525379285401379411866182644637816604420564273289577942059910893240159642288825039065567978889077221467087197780296563565993082074155711785726237636392004657772882279779518610436168955596288036754709842592157540488350512518467741842108928588315061755285832358620983392066137152961328725303349905199985893354387329841520079721054632334057516310738631119715413681050308552384111403349194087118188262358975993656121849097419118078142186113292660181749489466026458399417664727529790899869773301615315506616806494706950801775186241903974676207061561479218004259159215388022647091006777428632827698181996012611068080518015016222529127904790745056946088802010904697723153190082597292678159560645188522860394058672729378999663605577929806331193727611672578474210453425461580438629060580181637018492068243623804791219430131784665283902887592721129693005555633555705210296011661401793637812409228344524044721482828034650997237529663587391974845464832885676014955101296252506042809711077321591712865814524603781891002320840781394540761201946464729836058644185749301483513515144565309770916724966890506143328419508074640790052781360567370067738063664233318074006389140192080077112877201577569798205282164615218547739130622387667900778947916339129677879546499221927993003944781021617651259531110717571946743051072960422267311544055051412409519457611606590554758151019805601380979251572641575334698918632368566510104700985594930176716752627710487665719802965443145138186364734111366796329582450563435776685723480304241357485310077190440121612487226886510813763171267990700588785438624000905113547396663220582842692052518390945873708199113961956370547016891385874626))**(1/3)]
#[19967005847503923034507166918794965506267503428119552203292911361615132318903414819134103287113608735292986181147786515878575262609755277623932397581187246, -9983502923751961517253583459397482753133751714059776101646455680807566159451707409567051643556804367646493090573893257939287631304877638811966198790593623 - 771456569821584922256693369902764016239372722068394853403923361178938709770043333485345978614898773234557340570790401703783946838483311130240494535029156*sqrt(3)*I, -9983502923751961517253583459397482753133751714059776101646455680807566159451707409567051643556804367646493090573893257939287631304877638811966198790593623 + 771456569821584922256693369902764016239372722068394853403923361178938709770043333485345978614898773234557340570790401703783946838483311130240494535029156*sqrt(3)*I]

显然只有第四个结果中存在可使用的数,即为目标p+q,得到结果。

import hashlib
m=19967005847503923034507166918794965506267503428119552203292911361615132318903414819134103287113608735292986181147786515878575262609755277623932397581187246
print("XYCTF{" + hashlib.md5(str(m).encode()).hexdigest() + "}")
#XYCTF{a83211a70e18145a59671c08ddc67ba4}

  babyRSAMAX

题目:

from Crypto.Util.number import *
from gmpy2 import *
from random import choice

flag = b'XYCTF{******}'
e = '?'
def getBabyPrime(nbits):
    while True:
        p = 1
        while p.bit_length() <= nbits:
            p *= choice(sieve_base)
        
        if isPrime(p+1):
            return p+1

p = getBabyPrime(512)
q = getBabyPrime(512)
n = p*q
gift1 = (pow(p,e,n)-pow(q,e,n)) % n
gift2 = pow(p+q,e,n)

t = 65537
x = bytes_to_long(e)
y = pow(x, t, n)

m = bytes_to_long(flag)
c = powmod(m, e, n)

print(f'n = {n}')
print(f'gift1 = {gift1}')
print(f'gift2 = {gift2}')
print(f'c = {c}')
print(f'y = {y}')

'''
n = 39332423872740210783246069030855946244104982381157166843977599780233911183158560901377359925435092326653303964261550158658551518626014048783435245471536959844874036516931542444719549997971482644905523459407775392702211086149279473784796202020281909706723380472571862792003687423791576530085747716706475220532321
gift1 = 4549402444746338327349007235818187793950285105091726167573552412678416759694660166956782755631447271662108564084382098562999950228708300902201571583419116299932264478381197034402338481872937576172197202519770782458343606060544694608852844228400457232100904217062914047342663534138668490328400022651816597367310
gift2 = 111061215998959709920736448050860427855012026815376672067601244053580566359594802604251992986382187891022583247997994146019970445247509119719411310760491983876636264003942870756402328634092146799825005835867245563420135253048223898334460067523975023732153230791136870324302259127159852763634051238811969161011462
c = 16938927825234407267026017561045490265698491840814929432152839745035946118743714566623315033802681009017695526374397370343984360997903165842591414203197184946588470355728984912522040744691974819630118163976259246941579063687857994193309554129816268931672391946592680578681270693589911021465752454315629283033043
y = 1813650001270967709841306491297716908969425248888510985109381881270362755031385564927869313112540534780853966341044526856705589020295048473305762088786992446350060024881117741041260391405962817182674421715239197211274668450947666394594121764333794138308442124114744892164155894256326961605137479286082964520217

'''

先看题目,给的数据挺多,先处理一下。gift1=(p**e-q**e)%n(模数相同),  gift2=(p**e+q**e)%n(二项式展开),得到(gift1+gift2)/2=p**e%n。y是e的rsa加密密文,c是flag的rsa加密密文。还提供了质数生成函数,发现p-1是多个小质数的乘积即光滑数,可按Pollard's p-1实现n的分解。

import gmpy2

n = 39332423872740210783246069030855946244104982381157166843977599780233911183158560901377359925435092326653303964261550158658551518626014048783435245471536959844874036516931542444719549997971482644905523459407775392702211086149279473784796202020281909706723380472571862792003687423791576530085747716706475220532321
gift1 = 4549402444746338327349007235818187793950285105091726167573552412678416759694660166956782755631447271662108564084382098562999950228708300902201571583419116299932264478381197034402338481872937576172197202519770782458343606060544694608852844228400457232100904217062914047342663534138668490328400022651816597367310
gift2 = 111061215998959709920736448050860427855012026815376672067601244053580566359594802604251992986382187891022583247997994146019970445247509119719411310760491983876636264003942870756402328634092146799825005835867245563420135253048223898334460067523975023732153230791136870324302259127159852763634051238811969161011462

s=gift1+gift2
p = gmpy2.gcd(s, n)
print(p)
#166353789373057352195268575168397750362643822201253508941052835945420624983216456266478176579651490080696973849607356408696043718492499993062863415424578199

分解出p,q后观察到可以按基础rsa解密y

from Crypto.Util.number import *
import gmpy2
n = 39332423872740210783246069030855946244104982381157166843977599780233911183158560901377359925435092326653303964261550158658551518626014048783435245471536959844874036516931542444719549997971482644905523459407775392702211086149279473784796202020281909706723380472571862792003687423791576530085747716706475220532321
p=166353789373057352195268575168397750362643822201253508941052835945420624983216456266478176579651490080696973849607356408696043718492499993062863415424578199
q=n//p
y = 1813650001270967709841306491297716908969425248888510985109381881270362755031385564927869313112540534780853966341044526856705589020295048473305762088786992446350060024881117741041260391405962817182674421715239197211274668450947666394594121764333794138308442124114744892164155894256326961605137479286082964520217
t = 65537
f=n+1-p-q
d=gmpy2.invert(t,f)
ee=pow(y,d,n)
print(long_to_bytes(ee))
#b'XYCTF{e==4096}'

得到e后试图按基础rsa求解,发现无法进行乘法逆元运算,

ZeroDivisionError: invert() no inverse exists

注意到e=2**12,可能使用robin算法,按模版进行尝试

from Crypto.Util.number import *

def rabin(c):
    mp = pow(c, (p + 1) // 4, p)
    mq = pow(c, (q + 1) // 4, q)

    yp = inverse(p,q)
    yq = inverse(q,p)

    r = (yp * p * mq + yq * q * mp) % n
    r_ = n - r
    s = (yp * p * mq - yq * q * mp) % n
    s_ = n - s
    return r,r_,s,s_

c = 16938927825234407267026017561045490265698491840814929432152839745035946118743714566623315033802681009017695526374397370343984360997903165842591414203197184946588470355728984912522040744691974819630118163976259246941579063687857994193309554129816268931672391946592680578681270693589911021465752454315629283033043
n = 39332423872740210783246069030855946244104982381157166843977599780233911183158560901377359925435092326653303964261550158658551518626014048783435245471536959844874036516931542444719549997971482644905523459407775392702211086149279473784796202020281909706723380472571862792003687423791576530085747716706475220532321
p=166353789373057352195268575168397750362643822201253508941052835945420624983216456266478176579651490080696973849607356408696043718492499993062863415424578199
q=236438400477521597922950445153796265199072404577183190953114805170522875904551780358338769440558816351105253794964040981919231484098097671084895302287425479

e=4096

ans = [c] 
for i in range(12):
    ps = [] 

    for c in ans:
        r,r_,s,s_ = rabin(c)
        if r not in ps:
            ps.append(r)
        if r_ not in ps:
            ps.append(r_)
        if s not in ps:
            ps.append(s)
        if s_ not in ps:
            ps.append(s_)
   
    ans = ps
for i in range(len(ans)):
    print(long_to_bytes(ans[i]))
#b'XYCTF{Rabin_is_so_biggggg!}'

得到答案。

  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值