Python p==q时的RSA加密

Python p==q时的RSA加密,python,cryptography,rsa,ctf,Python,Cryptography,Rsa,Ctf,2天前我参加了DawgCTF。 我正要解决RSA问题,但我无法解决 给出了DawgCTF的RSA问题的n,e,c 所以,我用factordb分解了n,n的结果是一个素数的平方 我从未见过RSA加密中p和q相同的情况。 无论如何,我将phi设为(p-1)(q-1)并编写如下代码。(φ是指欧拉的φ) 但是,它不起作用 在CTF之后,我找了一篇文章,他没有把phi写成(p-1)^2,而是写成p*(p-1)。 但是,我不知道为什么。。。 当p==q时,为什么φ应该是p*(p-1) 如果你能解释的话,我

2天前我参加了DawgCTF。 我正要解决RSA问题,但我无法解决

给出了DawgCTF的RSA问题的n,e,c

所以,我用factordb分解了n,n的结果是一个素数的平方
我从未见过RSA加密中p和q相同的情况。 无论如何,我将phi设为(p-1)(q-1)并编写如下代码。(φ是指欧拉的φ)

但是,它不起作用

在CTF之后,我找了一篇文章,他没有把phi写成(p-1)^2,而是写成p*(p-1)。 但是,我不知道为什么。。。 当p==q时,为什么φ应该是p*(p-1)


如果你能解释的话,我真的很感激。

中的第一个等号φ(p*q)=φ(p)*φ(q)=(p-1)*(q-1)假设
p
q
是互质(参见),而第二个等号假设
p
q
是素数(参见,
k=1
p=q
违反了第一个条件,这就是为什么此关系对
p=q
无效的原因

另一方面,对于
k=2
,它来自
phi(p*p)=p*(p-1)
,即
p=q
的CTF解决方案中使用的关系

但是,对于实际中的RSA,
p!=q
是先决条件,请参见和(否则可以快速确定
p
q
p=q=sqrt(N)

from Crypto.Util.number import inverse, long_to_bytes
import string

n = ~~~ 
e = 65537
c = ~~~
p = ~~~ # I omit q because p==q


phi = (p-1) * (p-1)
d = inverse(e, phi)
m = pow(c, d, n)

m = long_to_bytes(m)
print(m)