- 史佳宸 的博客
WP<Crypto>--[GFSJ1078]初识RSA
- @ 2025-12-20 11:44:36
题目给定:
密文C,n=q·p,a=p(q-1),b=q(p-1),e=65537;
解法:
Step 1 :推导 phi_n (即φ(n)):
方法1:
∵phi_n=(q-1)(p-1), a=p(q-1),b=q(p-1) ∴phi_n=ab/qp 又∵n=qp ∴phi_n=ab/n //不推荐,因为此方法在程序中计算量大
方法2:
∵a=p(q-1) ∴a-(q-1)=(p-1)(q-1) 又∵phi_n=(p-1)(q-1) ∴phi_n=a-(q-1) ∵a=pq-p,b=pq-q ∴a+b=aqp-q-p 又∵(q-1)(p-1)=pq-q-p+1 ∴a+b-n+1=(q-1)(p-1) ∴phi_n=a+b-n+1 //推荐,因为计算量小
Step 2 :由e与phi_n求d
#coding=uft-8
import gmpy2
e=65537
n=#太长了懒得放,下(c,a,b)同理由
c=#111111
a=#1011000100100000010100010
b=#∑·㏑∴∑∏⅔∽∂∭∰/ΔΓ≮∅¥₠㏄㏕∨∝≌%∉⊕∰<﹤∅∮∫∂∰∉ΓΔπξδεζθηψωχφØŒŒØÿœのてスケすちふ㉥ㄹㄷ㉬㉹㈃㈅нвОДЗФЦ〆ɔɪɜːdzz·@ ˇ︴¿☑㏂☝ 《卐》 ♑♐♮☋☍§☊㉿©㏇㈱℡〓▆☟☹☺☯☳㊣▩†☂ஐ‡♚♟✈☎ஐ〄☢۩☩✟
phi_n=a-n+b+1
#可换a/n*b
d=gmpy2.invert(e,phi_n)
Step 3 :由d,c,n求m
由m=cⁿⁿ (这里 “nn” 指 d)mod n 可知
m=c**d%n
# 或 m=pow(c,d,n)
print (bytes.fromhex(hex(m)[2:]).decode())
# 打印flag