n = q * p # print(n) d = gmpy2.invert(e, (p - 1) * (q - 1)) print("d=", d) m = pow(c, d, n) print(m) print(long_to_bytes(m))
【flag】
flag{222d1c22-3b28-430c-a6fd-5db32e6fae51}
RSA3
【题目】
这个e怎么这么小啊
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
import libnum from Crypto.Util.number import * import flag flag = flag.flag1.encode('utf-8') m = bytes_to_long(flag) p = getPrime(1024) q = getPrime(1024) n = p*q e = 3 c = pow(m,e,n)
m = iroot(c, e) if m[1]: m = m[0] print(long_to_bytes(m))
【flag】
flag{82ad5d36-3ee5-47cf-a370-f84d3fc8fac4}
RSA4
【题目】
简单的解方程,sage是个好工具
1 2 3 4
n = 24585768801100871989460458412563674690545986652089097718040761783186739174559136657307807040444318337561194142282186006216583089898423180103199568738639814413601595196467099996734334212909157604318709957690532885862891927163713619932622153281344607898846228206181834468325246573910857887714824338949742479585089251882243488454602710292507668577598274622372304293403731722318890268908300308478539449464617438721833942643889296634768118375076052778833640986893990732882252524850152650060780854621796349622086656401914022236044924841914313726991826438982902866584892213702893596657746111940812657202364588469026832387629 p - q = 14048479366496281701869293063643750801596179514889914988732592464154208813942939793532694949932787548745769133200541469022315588864587160064703369956054828780928008235304461825448872454098086255531582368864754318040219023548966787642948010656526691472780392631956031751285174567712974691729142190835749586660 e = 65537 c = 13043206753625359891696429504613068427529111016070088678736297291041435652992434742862062899975037273524389833567258051170507686131853178642412748377655159798601888072877427570380109085131089494464136940524560062629558966202744902709909907514127527274581612606840291391818050072220256661680141666883565331886278443012064173917218991474525642412407692187407537171479651983318468186723172013439034765279464665108704671733067907815695414348312753594497823099115037082352616886076617491904991917443093071262488786475411319592529466108485884029307606114810451140886975584959872328937471166255190940884805476899976523580343
【题解】
用sage跑一下,得出p、q的值。注意p和q均为正数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
import gmpy2 from Crypto.Util.number import long_to_bytes
n = q * p # print(n) d = gmpy2.invert(e, (p - 1) * (q - 1)) print("d=", d) m = pow(c, d, n) print(m) print(long_to_bytes(m))
【flag】
nctf{my_M4th_1s_t00_b4d!!!}
RSA5
【题目】
还是解方程,以后看到除p*q外的p、q的另外的关系要看看能不能解方程哦
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
from Crypto.Util.number import * from secret import flag
m = bytes_to_long(flag) e = 65537 p = getPrime(512) q = getPrime(128) n = p*q hint = p**3-q**5 c = pow(m,e,n) print(f'n = {n}') print(f'c = {c}') print(f'hint = {hint}') ''' n = 2230791374046346835775433548641067593691369485828070649075162141394476183565187654365131822111419512477883295758461313983481545182887415447403634720326639070667688614534290859200753589300443797 c = 2168563038335029902089976057856861885635845445863841607485310134441400500612435296818745930370268060353437465666224400129105788787423156958336380480503762222278722770240792709450637433509537280 hint = 392490868359411675557103683163021977774935163924606169241731307258226973701652855448542714274348304997416149742779376023311152228735117186027560227613656229190807480010615064372521942836446425717660375242197759811804760170129768647414717571386950790115746414735411766002368288743086845078803312201707960465419405926186622999423245762570917629351110970429987377475979058821154568001902541710817731089463915930932142007312230897818177067675996751110894377356758932 '''