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}'
 

 

posted @ 2022-07-02 19:44  Jjyyyyy  阅读(153)  评论(0编辑  收藏  举报