题目
已知n,c,e,dp
e = 65537
n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657
c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751
题目解析
数学解析
已知公钥n,c、密文c以及dp
其中dp = d mod (p-1)
已知
c = m^e mod n
m = c^d mod n
ϕ(n)=(p−1)*(q−1)
d∗e ≡ 1 mod ϕ(n)
dp = d mod (p−1)
由上述式子可以得到
dp*e ≡ d*e mod (p-1)
进而分解为
d*e = k*(p-1)+dp*e
又因为d∗e ≡ 1 mod ϕ(n)
所以得到k*(p-1)+dp*e ≡ 1 mod ϕ(n)
化简
--->k*(p-1)+dp*e ≡ 1 mod ϕ(n)
--->k*(p-1)+dp*e ≡ 1 mod (p-1)*(q-1)
--->k1*(p-1)+dp*e = 1 + k2*(p-1)*(q-1)
--->dp*e = k2*(p-1)*(q-1)-k1*(p-1)+1
--->dp*e = [k2*(q-1)-k1)]*(p-1)+1
因为dp = d mod (p-1)
即,dp为d%(p-1);所以dp<p-1
那么,e>k2*(q-1)-k1
令i = k2*(q-1)-k1
则i
的范围为(1,e)
上述式子最终化简为
dp*e = i*(p-1)+1
在(1,e)范围内存在一个p可以被n整除并且满足上式
解密脚本
from Crypto.Util.number import *
import gmpy2
e = 65537
n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657
c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751
for i in range(1,e+1):
if (dp*e-1)%i == 0:
if n%(((dp*e-1)//i)+1) ==0:
p = ((dp*e-1)//i)+1
q = n//p
phi = (p-1)*(q-1)
d = gmpy2.invert(e,phi)
m = pow(c,d,n)
print(long_to_bytes(m))
【很多时候自顾自的生闷气,就跟会变味的酒一样,自己又喝不掉,一打开酒坛子,谁都不愿意喝。那股子酒气,就是一个人不太好的情绪,积攒多了,看上去谁都闻不着,其实谁都知道,但是只能假装闻不着,不知道。日子久了,看上去好像谁都在照顾对方,其实谁都委屈哩,很累人的。】