XCTF攻防世界 Normal_RSA

XCTF攻防世界 Normal_RSA

實驗環境: windows 10html

實驗所需工具:
python工具:
yafu (能夠在https://github.com/DarkenCode/yafu上下載)

python

gmpy2 (直接pip install gmpy2便可)git

rsa加密的相關知識能夠看這兩篇文章
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

看題

題目給了這兩個文件
flag.enc 是通過rsa加密後的密文, pubkey.pem 是rsa的公鑰文件
能夠用記事本打開pubkey.pem文件,把文件內容放到rsa解密網站上分析
由此可知




github

n = 87924348264132406875276140514499937145050893665602592992418171647042491658461
e = 65537

使用yafu對n進行質因數分解,到yafu安裝的文件目錄輸入yafu-x64使用
輸入factor(87924348264132406875276140514499937145050893665602592992418171647042491658461)
便可分解出質因數
在這裏插入圖片描述其中的兩個p39爲分解出來的兩個質因數


算法

p1 = 319576316814478949870590164193048041239
p2 = 275127860351348928173285174381581152299

而後在計算n的歐拉函數φ(n) = (p1-1)*(p2-1)
在這裏插入圖片描述φ(n) = 87924348264132406875276140514499937144456189488436765114374296308467862464924
windows

再利用 gmpy2 計算出 e 模 φ(n) 的逆元 d
gmpy2.invert()方法中第一個參數爲 e ,第二個參數爲 φ(n),經過此方法計算能夠獲得 d
在這裏插入圖片描述獲得d = 10866948760844599168252082612378495977388271279679231539839049698621994994673

數組

到這裏,咱們已經知道了函數

n = 87924348264132406875276140514499937145050893665602592992418171647042491658461
e = 65537
d = 10866948760844599168252082612378495977388271279679231539839049698621994994673

看到好多文章中都用了 rsatool 這個工具 ,可是我安裝老是會報錯,也不知道是什麼緣由,如今都沒安裝好。。。工具

可是看了一下rsatool的做用是已知 n,e,d密文文件能夠進行解密獲得從而獲得明文網站

既然用不了rsatool,那就根據RSA加解密的原理來計算
設m爲明文,c爲密文,則RSA的加解密算法爲 c = m e m o d      n c = m^{e}\mod\ n c=memod n
m = c d m o d      n m = c^{d}\mod\ n m=cdmod n

密文c在flag.enc文件中,打開文件看到是這樣的
在這裏插入圖片描述
但根據公式, c 須要爲數字,那麼就用16進制編碼從新打開文件,獲得了密文的16進制形式
在這裏插入圖片描述
c = 0x6d3eb7df23eee1d38710beba78a0878e0e9c65bd3d08496dda64924199110c79



根據 m = c d m o d      n m = c^{d}\mod\ n m=cdmod n
進行計算獲得明文m
在這裏插入圖片描述不知道pow函數做用的看這裏

如今已經獲得了明文 m16進制形式
那麼就能夠把16進制轉換爲字符串,便可獲得明文
可是又出現了一個問題,我放到在線網站上轉換爲字符串的時候,轉換不出字符串
在這裏插入圖片描述後來發現這串16進制的字符個數爲奇數個,正常的話16進制的字符應該是由兩個 0~f 的數組成,也就是這串16進制的字符數的個數必定是偶數
在這裏插入圖片描述
能夠看到這一串字符串的長度爲 64-2-1=61 是奇數(減2是由於最前面的0x,減1是由於最後面的L(表示長整型))
因而就把第一個字符刪去,再轉換爲字符串
在這裏插入圖片描述其中可見字符串即爲flag

相關文章
相關標籤/搜索