Theorem
Theorem
打开题:
from Crypto.Util.number import *
from gmpy2 import *
flag = b'xxx'
m = bytes_to_long(flag) #flag=long_to_bytes(m)
p = getPrime(512) #随机生成一个512位的素数p
q = next_prime(p) #p之后的下一个素数是q
e = 65537
n = p * q
phi = (p - 1) * (q - 1)
d = inverse(e, phi) #使d×e≡1(mod(phi))
d1 = d % q
d2 = d % p
c = pow(m, e, n) #c=m的e次方mod n
#通过下面已知n,c,d1,d2
print(n)
print(d1)
print(d2)
print(c)
# 94581028682900113123648734937784634645486813867065294159875516514520556881461611966096883566806571691879115766917833117123695776131443081658364855087575006641022211136751071900710589699171982563753011439999297865781908255529833932820965169382130385236359802696280004495552191520878864368741633686036192501791
# 4218387668018915625720266396593862419917073471510522718205354605765842130260156168132376152403329034145938741283222306099114824746204800218811277063324566
# 9600627113582853774131075212313403348273644858279673841760714353580493485117716382652419880115319186763984899736188607228846934836782353387850747253170850
# 36423517465893675519815622861961872192784685202298519340922692662559402449554596309518386263035128551037586034375613936036935256444185038640625700728791201299960866688949056632874866621825012134973285965672502404517179243752689740766636653543223559495428281042737266438408338914031484466542505299050233075829
通过观察RSA加密。
所以解密脚本:
from Crypto.Util.number import long_to_bytes
import gmpy2
import libnum
from sympy import prevprime
e = 65537
n = 94581028682900113123648734937784634645486813867065294159875516514520556881461611966096883566806571691879115766917833117123695776131443081658364855087575006641022211136751071900710589699171982563753011439999297865781908255529833932820965169382130385236359802696280004495552191520878864368741633686036192501791
c = 36423517465893675519815622861961872192784685202298519340922692662559402449554596309518386263035128551037586034375613936036935256444185038640625700728791201299960866688949056632874866621825012134973285965672502404517179243752689740766636653543223559495428281042737266438408338914031484466542505299050233075829
# 分解n
p = prevprime(gmpy2.iroot(n,2)[0])
q = n // p
# 求d
d = gmpy2.invert(e,(p-1) * (q-1))
#m=pow(c,d,n)
print(long_to_bytes(pow(c,d,n)))
------------------------------------------------------
flag{5f00e1b9-2933-42ad-b4e1-069f6aa98e9a}
关于RSA加密我特别推荐zhang三的[RSA算法原理及CTF解题](https://blog.csdn.net/qq_45521281/article/details/114706622)