buuB1NOOK第七章
#[第七章 CTF之CRYPTO章]BabyRSA
from Crypto.Util.number import * flag = bytes_to_long("n1book{*********}") p = getPrime(128) q = getPrime(128) n = p * q e = 65537 cipher = pow(flag, e, n) print n, cipher # 69343391982073836527260787066436662760820725339907775857387709078502658633087 # 19914364722342610626569065936888842248099105322649309104924491672406432347316
解密脚本:
from Crypto.Util.number import * import gmpy2 p = 226134486267985710544345427491176087287 q = 306646691207889915109374013611076713401 n = 69343391982073836527260787066436662760820725339907775857387709078502658633087 e = 65537 c = 19914364722342610626569065936888842248099105322649309104924491672406432347316 d = gmpy2.invert(e,(p-1)*(q-1)) m = pow(c,d,n)print(long_to_bytes(m)) b'n1book{ju5t_f4ctor1z3_N}'
#[第七章 CTF之CRYPTO章]CommonModulus
from Crypto.Util.number import * flag = bytes_to_long("n1book{****}") p = getStrongPrime(1024) q = getStrongPrime(1024) n = p * q e1 = 65537 e2 = 114514191981019 c1 = pow(flag, e1, n) c2 = pow(flag, e2, n) print n print c1 print c2 # 21623080544326498770675136722722081442439962670407342395305257399968527773581643605241107498528119713992996112133936315623505193574782799603552625740778966924901449389879888187296229193572703630895013561444087175709585672299795813307303532524319169791834267438418957827453143225241009361840070934759969916044339329942862741713208492233157686885054848656633606994047037790363445284574522253355820330588355739897608746238421274338160893558077079146666405543198979779203179957475108269486195166116691445583387563226342399303801829616340122550517473370017331840240330038653549495123025292843090770265859170008411116218471 # 3686070958006400066676896030505702217756191695023602240096969503017648828644691192057070046536001572856205835043801785933065850261954210319115823680049891823050292885485323323140033607272590943498691377919095190060985052833112726154274459291873173327659343895562889002010290535716987458497835434051180970393386727569771585825303272194369216597407631372359221306049206080186804424082565150971106654494167453149476990197267600547716764283635086081312961031919543089692705243104365160016279057956490493340808621710104541388922037714689908491034393881273270956513183195581141005108648929958780549505311901183420824202758 # 20519990396147494400829214415220524051576903563262552552508746140570722860446739173237919576359792936423522550105610212640682808724898202791111216569703984637995831736979822035082736739633487200561199241240094912093910049495026489770488782992504677151121715385721047361580850774592966505593868956262508955779543607113010652542097275366794795374310887659456919427340641996939291171422822032239220746577159373621633953025517157564463487003581524575909963352758383177950127910526812843694538203584637074695004394861384092452744111113362733514626260457817063526579839612934117073068466395605475689722150376414880287178988
共模攻击解密脚本:
from Crypto.Util.number import * import gmpy2 as gp def egcd(a, b): if a == 0: return (b, 0, 1) else: g, y, x = egcd(b % a, a) return (g, x - (b // a) * y, y) n = 21623080544326498770675136722722081442439962670407342395305257399968527773581643605241107498528119713992996112133936315623505193574782799603552625740778966924901449389879888187296229193572703630895013561444087175709585672299795813307303532524319169791834267438418957827453143225241009361840070934759969916044339329942862741713208492233157686885054848656633606994047037790363445284574522253355820330588355739897608746238421274338160893558077079146666405543198979779203179957475108269486195166116691445583387563226342399303801829616340122550517473370017331840240330038653549495123025292843090770265859170008411116218471 e1 = 65537 e2 = 114514191981019 c1 = 3686070958006400066676896030505702217756191695023602240096969503017648828644691192057070046536001572856205835043801785933065850261954210319115823680049891823050292885485323323140033607272590943498691377919095190060985052833112726154274459291873173327659343895562889002010290535716987458497835434051180970393386727569771585825303272194369216597407631372359221306049206080186804424082565150971106654494167453149476990197267600547716764283635086081312961031919543089692705243104365160016279057956490493340808621710104541388922037714689908491034393881273270956513183195581141005108648929958780549505311901183420824202758 c2 = 20519990396147494400829214415220524051576903563262552552508746140570722860446739173237919576359792936423522550105610212640682808724898202791111216569703984637995831736979822035082736739633487200561199241240094912093910049495026489770488782992504677151121715385721047361580850774592966505593868956262508955779543607113010652542097275366794795374310887659456919427340641996939291171422822032239220746577159373621633953025517157564463487003581524575909963352758383177950127910526812843694538203584637074695004394861384092452744111113362733514626260457817063526579839612934117073068466395605475689722150376414880287178988 s = egcd(e1, e2) s1 = s[1] s2 = s[2] if s1<0: s1 = - s1 c1 = gp.invert(c1, n) elif s2<0: s2 = - s2 c2 = gp.invert(c2, n) m = pow(c1,s1,n)*pow(c2,s2,n) % n print(long_to_bytes(m))
b'n1book{c0mm0n_m0du1u5_4ttacK}'
RSA脚本大多引用自https://lazzzaro.github.io/2020/05/06/crypto-RSA/