1.三素数问题(环境python3)
给出一个大N,分解出三个素数的乘积
题目如下:
n = 4290418064651218965804214795113724709341221467051724424273
c = 3768080601578220931469806950641649528063040768546211773945
e = 3
使用factordb分解,得出三个因子,记为p,q,r
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是可以计算出明文的: