1.三素数问题(环境python3)

给出一个大N,分解出三个素数的乘积
题目如下:

  1. n = 4290418064651218965804214795113724709341221467051724424273
  2. c = 3768080601578220931469806950641649528063040768546211773945
  3. e = 3

使用factordb分解,得出三个因子,记为p,q,r
image.png
p=14574373685302455767
q=17136129397262704181
r=17178964373573894299
n=pqr
而计算则是采用常规解题目思路,既然分解出三个因子,那可以考虑每两个因子作为一个组合,记做pq,从而计算D。

#-*- coding: utf-8 -*-
import gmpy2
import binascii
"""
已知p,q,e,c   直接求解D,解密M

p=14574373685302455767
q=17136129397262704181
r=17178964373573894299
"""
p=14574373685302455767
q=17136129397262704181
r=17178964373573894299
e=3
c=3768080601578220931469806950641649528063040768546211773945
n =p*q
phi_1 = n-1
#当n为绝对素数时phi = n-1
phi_2 = (p-1)*(q-1)
phi_3 = (p-1)*(r-1)
phi_4 = (r-1)*(q-1)

#当p,q互素时,phi = (p-1)(q-1))
try:
    d  = gmpy2.invert(e, phi_2)
    m = pow(c, d, n)
    print("M1:" + str(m))
    print(binascii.a2b_hex(hex(m)[2:]))
except:
    print('err')

#解出的一般为16进制或者10进制,10进制hex一下丢hxd可得明文

代换phi_3,phi_4,无法计算逆元,而计算第一个组合,pq是可以计算出明文的:
image.png