import gmpy2 as gp
e = 65537
n = 248254007851526241177721526690180298583276617622160961225887737162058006043310153832803030521991869736198142009306796121098855338013353484450237516704784370730555447242806847332980515991676603035183146161497485358633681492129668802402065797790555045475118787266601929429724133167768465309665906113
dp = 905074498052346904302513287951833069192517457305400462187725331868267505542197094355201669552856038344463031969392070562927148093290374440210503657
c = 140423670976252696807533673586209400575628210068411978420352712452110382659743688376604187906749428095741020195357373603808018454538292939974334141888387257517962617026220285872115603533628471910603065785105113809651621334726987130635926210259167072781482562673683090590521214218071160287665180751
for i in range(1, e): # 在范围(1,e)之间进行遍历
if (dp * e - 1) % i == 0:
if n % (((dp * e - 1) // i) + 1) == 0: # 存在p,使得n能被p整除
p = ((dp * e - 1) // i) + 1
q = n // (((dp * e - 1) // i) + 1)
phi = (q - 1) * (p - 1) # 欧拉定理
d = gp.invert(e, phi) # 求模逆
m = pow(c, d, n) # 快速求幂取模运算
print(m) # 10进制明文
print('------------')
print(hex(m)[2:]) # 16进制明文
print('------------')
print(bytes.fromhex(hex(m)[2:])) # 16进制转文本