【SUCTF2019】SignIn wp

反編譯之後發現和RSA算法有關,有關RSA的知識後續填坑.....先來說一下這道題:
(先貼出一個Google上找到的pycharm安裝pmgy2包的鏈接:pycharm導入gmpy2包):

int mpz_init_set_str():

int mpz_init_set_str (mpz_t rop, char *str, int base)
mpz_t rop:多精度整數變量
char *str: 字符串
int base: 進制
將str按照base進制轉換爲rop

void mpz_powm():

void mpz_powm (mpz_t rop, const mpz_t base, const mpz_t exp, const mpz_t mod) [Function]
函數功能: rop = base^exp取餘mod

ps.sub_96A()函數的作用是將輸入的字符串(HEX)轉化成ASCII

然後大致思路就出來了,是一個RSA算法,其中:
 

密文:ad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35
N(十進制):103461035900816914121390101299049044413950405173712170434161686539878160984549
E:65537

用yafu分解得到兩個大的質數:(yafu的下載和使用會在具體寫RSA算法的時候填)

p = 366669102002966856876605669837014229419
q = 282164587459512124844245113950593348271

exp:

import gmpy2
N = 103461035900816914121390101299049044413950405173712170434161686539878160984549
E = 65537
p = 282164587459512124844245113950593348271
q = 366669102002966856876605669837014229419
L = (p-1)*(q-1)
D = int(gmpy2.invert(E, L)) 
'''
gmpy2.invert()返回值類型爲<class 'mpz'>
invert(x,y)  計算 x 關於1模 y 的乘法逆元
'''
enstr = 0xad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35
destr = gmpy2.powmod(enstr, D, N)
'''
gmpy2.powmod()返回值類型爲<class 'mpz'>
gmpy2.powmod(x,y,z),計算x^y mod z 的值並返回
'''
flag0 = hex(destr)[2:]     # flag0類型爲str,存的是十六進制表示的字符串
#[2:]目的是把0x拋去
flag1 = bytes.fromhex(flag0)  # 將其從十六進制轉換爲byte類型(此時已解釋成字符)
flag = str(flag1, 'utf-8')  # 將byte類型轉換爲str類型
print(flag)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章