from random import randint
from gmpy2 import *
from Crypto.Util.number import *
m = bytes_to_long(b'flag{********************************}')
def getprime(bits):
while 1:
n = 1
while n.bit_length() < bits:
n *= next_prime(randint(1,1000))
if isPrime(n - 1):
return n - 1
p = getprime(512)
q = getprime(512)
n = p*q
e = 65537
d = invert(e,(p-1)*(q-1))
c = pow(m,e,n)
res = []
mod = []
[mod.append(getprime(128)) for i in range(12)]
[res.append(c%mod[i]) for i in range(12)]
print(n,(p>>128)<<128),mod,res)
'''
output:
3216831712236484919804716473942409526434016529181790011140718891645020999952523287950679312500771653918738887189899203815116997399422419456666136527466294225647700744715569996552708989626431982330367733125015062070399091789218760399060531383324158096784030850407432126491091299460659042468401054516052600467997
36691536769373164488130311421517753226870999465362409179446664596323017708216823951466573340643687346264018616414288774195411449434676147898363218552160256
[127358722814661886628344839530462144916373, 1569005233424413714924223862235964763229, 15953826944429720811716497916877126603181, 22667750449179799152236917772041505492557, 7259500259309895932387328648172298540473, 1216723397014858024629084355784570444737, 5803969258694833349275399163572927306963, 2847514965593473340352693322675908465517, 55965603506094486681210827499140188004581, 3758825246939161175629619499256754206153, 9865309015695677187200661453839724337633, 1985189335531812324455545509044214546841)]
[17514122934988110165886587218707943859589, 828023569353871016099054873610645592579, 3834965867062595899595546144451189629655, 5083410101797762407471893731877939884166, 6199590917760184276466050254032811548454, 208337506454727094683323122852921121527, 5210709327454808237359999225611588134922, 239093795148407379152016295908193630983, 29793049900271876372064873251244672365333, 1641943491807405218384351799880631607416, 1685895805013787734204509484411577153108, 1511298522529374764380482522275435302730)]
'''
solve1
n=3216831712236484919804716473942409526434016529181790011140718891645020999952523287950679312500771653918738887189899203815116997399422419456666136527466294225647700744715569996552708989626431982330367733125015062070399091789218760399060531383324158096784030850407432126491091299460659042468401054516052600467997
p4=36691536769373164488130311421517753226870999465362409179446664596323017708216823951466573340643687346264018616414288774195411449434676147898363218552160256#已知P的高位
pbits=p4.nbits() #P原本的位数
kbits=128
print(pbits,n.nbits())
PR. = PolynomialRing(Zmod(n))
f = x + p4
roots = f.small_roots(X=2^kbits,beta=0.4)
# 经过以上一些函数处理后,n和p已经被转化为10进制
print(roots)
if roots:
p= p4 + int(roots[0])
q=n//p
assert p*q==n
mod = [127358722814661886628344839530462144916373, 1569005233424413714924223862235964763229, 15953826944429720811716497916877126603181, 22667750449179799152236917772041505492557, 7259500259309895932387328648172298540473, 1216723397014858024629084355784570444737, 5803969258694833349275399163572927306963, 2847514965593473340352693322675908465517, 55965603506094486681210827499140188004581, 3758825246939161175629619499256754206153, 9865309015695677187200661453839724337633, 1985189335531812324455545509044214546841]
res = [17514122934988110165886587218707943859589, 828023569353871016099054873610645592579, 3834965867062595899595546144451189629655, 5083410101797762407471893731877939884166, 6199590917760184276466050254032811548454, 208337506454727094683323122852921121527, 5210709327454808237359999225611588134922, 239093795148407379152016295908193630983, 29793049900271876372064873251244672365333, 1641943491807405218384351799880631607416, 1685895805013787734204509484411577153108, 1511298522529374764380482522275435302730]
e=65537
c=crt(res, mod)
d=inverse_mod(e,(p-1)*(q-1))
m=pow(c,d,n)
bytes.fromhex(hex(m)[2:])
#b'flag{5bb5e0a9d48f44a3770253875f263810}'
solve2
python -m primefac -vs -m=p+1 3216831712236484919804716473942409526434016529181790011140718891645020999952523287950679312500771653918738887189899203815116997399422419456666136527466294225647700744715569996552708989626431982330367733125015062070399091789218760399060531383324158096784030850407432126491091299460659042468401054516052600467997
Z310 = P155 x P155 = 36691536769373164488130311421517753226870999465362409179446664596323017708216823951466573340643687346264018616414289061014410434943387973225734363385787789 x 87672307989062215446143529710752157306955526821841719247488664102327017984537994201433268176885668357106056974714015205850633744163704470170502301010174673