CTFRSA加解密
最近做題遇到好幾次RSA解密,最近密碼學(xué)課也學(xué)到了 RSA密碼算法,寫一篇文章促進對RSA的理解。
一:RSA的基本原理的理解:
1.學(xué)習(xí)RSA加密得知道歐拉函數(shù),想理解歐拉函數(shù)又得弄明白同余類與剩余系的知識,這些是基礎(chǔ)。
2.RSA的密鑰生成原理:
第一步:選擇兩個較大素數(shù)P,Q.
第二步:計算n=pq,z=(p-1)(q-1)。
第三步:隨機選取e(其中e<n),e與z沒有公因數(shù)(e,z互為質(zhì)數(shù))
第四步:選取d使得ed-1能夠被z完全整除。ed?mod z=1
第五部:公鑰是(n,e) 私鑰是(n,d)
?
二 下面以SUCTF 2019 signin記錄一下RSA的應(yīng)用與解密方法
?這里函數(shù)分析得到?
N=103461035900816914121390101299049044413950405173712170434161686539878160984549
c = 0xad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35
e = 65537
第一步我們要求取的是pq兩個素數(shù)的值 從其他大佬那里偷來神器RSAyafu 他可以講給定的數(shù)分成兩個相乘的素數(shù)
?
?直呼nb
第二種使用方法:
如果因數(shù)過長,將 因數(shù) 用文本文件存放在 yafu 目錄下,例如:data.txt 。文件最后一行一定要換行,否則 eof; done processing batchfile。
.\yafu-x64.exe "factor(@)" -batchfile data.txt
p = 366669102002966856876605669837014229419
q = 282164587459512124844245113950593348271
下面就是使用python解密了
(先得安裝gmpy2庫)
學(xué)習(xí)一下gmpy2庫的使用
gmpy2.invert(a,c) 對a,求b,使得a*b=1(mod c)
gmpy2.powmod(a,n,p)? 對于給定的整數(shù)p,n,a,計算a? mod p
補充一下binascii.unhexlify函數(shù)
unhexlify(hexstr)將十六進制轉(zhuǎn)換為二進制形式。
hex()函數(shù)記得加[2:]去掉開頭的0x。
求d腳本
import gmpy2 from Crypto.Util import number e=65537 n=87924348264132406875276140514499937145050893665602592992418171647042491658461 p=275127860351348928173285174381581152299 q=319576316814478949870590164193048041239 d=gmpy2.invert(e,(p-1)*(q-1)) print(d)密文拿到手之后,需要密文的數(shù)字形式,用winhex打開查看十六進制形式
最后得到的密文的十六進制形式數(shù)字個數(shù)需要是偶數(shù)被,不是則嘗試加0或者刪除
總結(jié)
- 上一篇: CTF C#逆向Reverse
- 下一篇: 大端序小端序存储