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