2021-07-30

RealSimpleAlgorithm

def findPrime(k):
	return k if isPrime(k) else findPrime(k+1)

这个就是nextprime的函数

根据素数定理,素数的平均间隔为:xπ(x)≈ln(x),因此常见的下一个素数比当前素数大一点,一般不会超过1500。

所以q≈20210123⋅p2 r≈p⋅q2≈202101232⋅p5 s≈p⋅q⋅r≈202101233⋅p8 n≈p⋅q⋅r⋅s≈202101236⋅p16

from Crypto.Util.number import *
import gmpy2
n=1860327696858483638242873699057481731828966202667118447875641737052580086130386699140211875656172396806529285296255507067947720275440395243585744762634134799652679012162553470358069174964736556509363739963446475910312109560748248281868924751143259992526361526412522842478707375878456331299480073407103013384269410605266503677321141979835759668348700985853882555130830212759763720486540122636774648845903535938171865529805154133050800829412616729038682693821153946780697800281104805967006792129015849883196671592937966261467844851060816687462875770271718292145518180058865214410450540186749260067900135932306081369153398970407522741521060589846700952216359783498238344249142661018574950492921311429449928332676262287371865397041940360919887179193158546566012224424610467409430530106325127453143332046586173655708209678969537534025563287565527639693302344631945245138747986244061559475507576544258646980555887980114731354108434171931096517519443070749376819964946147645021191161204976124462852481795577785818301494801337374774058200235940866073908815214039049293599099685705093404680728780357919497857265534594781388417585925624298595733372720769948915810845234441908719837268441890707914500735078108685345860010727793893553096315972642187748597783212870718592296897219117942591
p=gmpy2.iroot(n//pow(20210123,6),16)[0]
q=gmpy2.next_prime(20210123 * p * p)
r = gmpy2.next_prime(p * q * q)
s = gmpy2.next_prime(p * q * r)
e = 0x10001
c=1269414962691233498664463165968002949500261026554873872699730397170829184338702645720664869338117361950875039283444707270063908797802580047988982206986881886470344720759839138229424611506105363507488502330257438885161766694127829970279466126827896294112163623049594574690066833164066007087376604860719613154811648002443446051543330709279264124114817841970658311296214930221340840337072420415369432877843468405321256609876109525320613203483486479334467766370493556035428490175768124882295084410926076305576498582778161224462037349771830835884492547702755672194979825538780564438188081764504296339182179840321015421315522115839574256490913241664329832436026929121507882691640145495938523888884956512207663992263150017217396791763181318329688834548089992572870644164836550181686582948745612104929264255291426216402250619476537471436359480816675672798908367465965028874645228365955211347688748671107889311272579310905059727010489093790956814314447875676639361533385247901280477046278789468049048506181469291032460723404641984446319375211045134503877260023510177794741936939869390594640132004854563932269083706797033264908702085357457094976981875037948686070799989749242828113510135791700822952301425063571061267639436241022884111184800122156303237865748567212989367045314686640673
phi=(p-1)*(q-1)*(s-1)*(r-1)
d=gmpy2.invert(e,phi)
print(long_to_bytes(pow(c,d,n)))

1024_Trick

e1d=e2(d+1024)=1 mod phi
e1d-e2d=e2*1024
e1d(e1-e2)=1024e2e1
e1-e2=1024e2 mod phi
e1-e2-1024e2=kphi

from Crypto.Util.number import *
import gmpy2
n=28247956190796077548821036165832051095182478841343849341201099128819479182033196745888916043527789810068912335285845353736774484336851382817061906161464410813261565043154569983001168979661397673033159029064565590415202266364668996185387927547647414609049665701634943970073424680262167057713264162243044242199992525550717430218592937779319306804366853371496949090902097569447358748738601201092248706444400984549491240349808244847814292328867056531536176757195282237815281620345660712787511847864860157060561247341926472934445937054346872777130907776700747053879719058858665504682167737096909091658310703848714995507087
e1=14729696809459508716385569304221898763069627997586157384420106315856541102841676901689428248411442723122274238893709627729613555080244422116252212813081403190521848377387091820856797688344508117977167198575999802122072100976783815485227448685251402928453641606244138534312889639695831020684859444038879931443306689809413522781182634833029742866760422550903997471974167552388516014202843112478278655370138693696356621310668692751596233613748393311787483393850367208650431878268345462622307080790201460993914739555030933412223443727451306619192444521947087311524606746672804056939248534450817019868870802552074243882377
e2=10907651584541464409470494737289836122935666586931706055595902003883184928824627549246585826596861981965927482456455737073705999708471130440398909870554351524288791148142553288839156753336551721274021596567766812030470532876231205718107266170708315964229471470530690537533600851746463150957473253899821019421342552091338365357017748742821451767352420328276163005698272017204771807428933429417340619373269170581813206653190286582334483827342338454461627946086922006705360281421384249860374825149668002500611584152958000206147344275567898096476692898681393229095674001876869497249423498186867190630700665116613171171985
c=14151986355027540236877811729876734276410473157789551074684191809631364271052357249861862424614207635605041553420473293592242919606316628442514124449901660763278200999279517540020047022360186952956318844301844675024175636253509419780669989143178706203706350138854046573467948881219084764605132312446701967740275650109903208220772228525117766500225573404421894020148747991820530966508849170593946661068452445685905577771836515980941955814291933511646362511812580324895180140431064196870852032763940873198931010750588123937360585160510295014722360134758829576304291022740315244570633962516612490451736612193602659033973
a=e1-e2-1024*e1*e2
d=gmpy2.invert(e1,a)
m=pow(c,d,n)
print(long_to_bytes(m))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值