1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| from Crypto.Util.number import *
n = 71841248095369087024928175623295380241516644434969868335504061065977014103487197287619667598363486210886674500469383623511906399909335989202774281795855975972913438448899231650449810696539722877903606541112937729384851506921675290984316325565141178015123381439392534417225128922398194700511937668809140024838070124095703585627058463137549632965723304713166804084673075651182998654091113119667582720831809458721072371364839503563819080226784026253 e = 65537 c = 39297018404565022956251803918747154798377576057123078716166221329195959669756819453426741569480551313085435037629493881038383709458043802420338889323233368852331387845200216275712388921820794980987541224782392553528127093154957890356084331463340193478391679540506421250562554424770350351514435220782124981277580072039637811543914983033300225131364246910828188727043248991987332274929827173923543187017105236008487756190002204169623313222748976369 e1, e2, e3, e4 = ( 65128799196671634905309494529154568614228788035735808211836905142007976099865571126946706559109393187772126407982007858423859147772762638898854472065889939549916077695303157760259717113616428849798058080633047516455513870697383339784816006154279428812359241282979297285283850338964993773227397528608557211742425548651971558377656644211835094019462699301650412862894391885325969143805924684662849869947172175608502179438901337558870349697233790535, 58756559706647121529575085912021603170286163639572075337348109911506627489265537716060463072086480156516641723700802217411122982693536541892986623158818442274840863016647800896033363360822503445344748132842451806511693779600370832206455202293028402486647422212959763287987847280322100701242139127654031151565924132562837893975505159702015125483479126108892709063135006366792197127007229210558758401679638300464111782814561428899998471531067163715, 34828685390969672139784723764579499920301439564705391196519314224159563070870933754477650614819514127121146216049444888554338415587165719098661141454627820126445291802801256297252654045398330613075575527685542980264993711077876535643646746742646371967302159565887123638001580042027272379341650995728849759541960087953160211696369079708787543303742132161742979856720539914370868829868891655221361545648778590685232034703220732697083024449894197969, 26717968456600556973167180286909817773394160817933525240720067057464671317174201540556176814203780603153696663101158205367554829261808020426363683474848952397963507069306452835776851274959389849223566030857588019845781623271395012194869024566879791449466064832273531795430185178486425688475688634844530106740480643866537205900809400383304665727460014210405339697947582657505028211149470787536144302545259243549176816653560626044921521516818788487)
A = [ [1, -n, 0, n ^ 2, 0, 0, 0, -n ^ 3, 0, 0, 0, 0, 0, 0, 0, n ^ 4], [0, 1, -1, -n, -1, 0, n, n ^ 2, -1, 0, n, 0, n, 0, -n ^ 2, -n ^ 3], [0, 0, 1, -n, 0, n, 0, n ^ 2, 0, n, 0, 0, 0, -n ^ 2, 0, -n ^ 3], [0, 0, 0, 1, 0, -1, -1, -n, 0, -1, -1, 0, 0, n, n, n ^ 2], [0, 0, 0, 0, 1, -n, -n, n ^ 2, 0, 0, 0, -n ^ 2, 0, 0, 0, -n ^ 3], [0, 0, 0, 0, 0, 1, 0, -n, 0, 0, 0, n, -1, 0, n, n ^ 2], [0, 0, 0, 0, 0, 0, 1, -n, 0, 0, 0, n, 0, n, 0, n ^ 2], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, -1, 0, -1, -1, -n], [0, 0, 0, 0, 0, 0, 0, 0, 1, -n, -n, n ^ 2, -n, n ^ 2, n ^ 2, -n ^ 3], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, -n, 0, -n, 0, n ^ 2], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -n, 0, 0, -n, n ^ 2], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, -n], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -n, -n, n ^ 2], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, -n], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -n], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]] Q = [n ^ 2, n ^ 1.5, n ^ 2.4, n, n ^ 2.4, n ^ 1.9, n ^ 1.9, n ^ 0.5, n ^ 2.4, n ^ 1.9, n ^ 1.9, n ^ 1.4, n ^ 1.9, n ^ 1.4, n ^ 1.4, 1] P = [1, e1, e2, e1 * e2, e3, e1 * e3, e2 * e3, e1 * e2 * e3, e4, e1 * e4, e2 * e4, e1 * e2 * e4, e3 * e4, e1 * e3 * e4, e2 * e3 * e4, e1 * e2 * e3 * e4] A, P, Q = matrix(ZZ, A), diagonal_matrix(ZZ, P), diagonal_matrix(ZZ, Q) A = P * A * Q w = vector(ZZ, A.LLL()[0]) v = w * A ^ (-1) phi = int(e1 * v[1] // v[0]) print(hex(phi)) d = inverse(e, phi) print(long_to_bytes(pow(c, d, n)))
|