crypto-babyrsa(2025YC行业赛)
题面:
p+q=0x14ccf48eb8da8e14e6d2bb30a9d8a42315231521da4ac74b1d0668c0f79cf9248e9b50807a3838dd8a7263fc602d273398900a59713cea04cadd77503ce8968c0
(p+1)(q+1)=0x66d8b22d592ba8ce374ad3479a1832fece33f698fbbc9175aaacad81b88c6488485968e0e4331cc19bf6866b79b3da28f2363fe1e653d0fc9cd8429e9bd1dca7146e1c409ccf0b17b6d41c62ffb2697b7926b5f3c5f6dacdc4b380a2d5cda715b6ed96509fc3eeb6f574398d015cdc414602d209ce690b4c6282ef7d3ad5b8d8
e=0x10001
c=0x867d3be489389e059d9298559ef661e2121d66dbd0e968c74af31376ffb665436537b2d47b4a682141b70a3d5800759097507fc6c15bdfce184725b1aa494fb683d60c713aa900fa94f61baa31f492699377824eb4b55023a63cd474e61934ba23c4ae5fcbeec12695ce18578306a517cf405869a8f9daab6fe03af0de94e9d
m=?
用关系式推算n和phi:n=(p+1)(q+1)-(p+q)-1,phi=pq-(p+q)+1
写脚本直接解:
#p+q=0x14ccf48eb8da8e14e6d2bb30a9d8a42315231521da4ac74b1d0668c0f79cf9248e9b50807a3838dd8a7263fc602d273398900a59713cea04cadd77503ce8968c0
#(p+1)(q+1)=0x66d8b22d592ba8ce374ad3479a1832fece33f698fbbc9175aaacad81b88c6488485968e0e4331cc19bf6866b79b3da28f2363fe1e653d0fc9cd8429e9bd1dca7146e1c409ccf0b17b6d41c62ffb2697b7926b5f3c5f6dacdc4b380a2d5cda715b6ed96509fc3eeb6f574398d015cdc414602d209ce690b4c6282ef7d3ad5b8d8
plus1=0x14ccf48eb8da8e14e6d2bb30a9d8a42315231521da4ac74b1d0668c0f79cf9248e9b50807a3838dd8a7263fc602d273398900a59713cea04cadd77503ce8968c0
plus2=0x66d8b22d592ba8ce374ad3479a1832fece33f698fbbc9175aaacad81b88c6488485968e0e4331cc19bf6866b79b3da28f2363fe1e653d0fc9cd8429e9bd1dca7146e1c409ccf0b17b6d41c62ffb2697b7926b5f3c5f6dacdc4b380a2d5cda715b6ed96509fc3eeb6f574398d015cdc414602d209ce690b4c6282ef7d3ad5b8d8
n=plus2-plus1-1
phi_n=n-plus1+1
print(n)
e=0x10001
c=0x867d3be489389e059d9298559ef661e2121d66dbd0e968c74af31376ffb665436537b2d47b4a682141b70a3d5800759097507fc6c15bdfce184725b1aa494fb683d60c713aa900fa94f61baa31f492699377824eb4b55023a63cd474e61934ba23c4ae5fcbeec12695ce18578306a517cf405869a8f9daab6fe03af0de94e9d
#m=?import gmpy2
import binasciid = gmpy2.invert(e, phi_n)m = pow(c, d, n)
print("十进制:\n%s"%m)
m_hex = hex(m)[2:]
print("十六进制:\n%s"%(m_hex,))
print("ascii:\n%s"%(binascii.a2b_hex(m_hex).decode("utf8"),))