XCTF攻防世界 Normal_RSA
實驗環境: windows 10
實驗所需工具:
python工具:
yafu (可以在https://github.com/DarkenCode/yafu上下載)
gmpy2 (直接pip install gmpy2即可)
-
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解密網站上分析
由此可知
n = 87924348264132406875276140514499937145050893665602592992418171647042491658461
e = 65537
使用yafu對n進行質因數分解,到yafu安裝的檔案目錄輸入yafu-x64使用
輸入factor(87924348264132406875276140514499937145050893665602592992418171647042491658461)
即可分解出質因數
其中的兩個p39為分解出來的兩個質因數
p1 = 319576316814478949870590164193048041239
p2 = 275127860351348928173285174381581152299
然后在計算n的歐拉函式φ(n) = (p1-1)*(p2-1)

φ(n) = 87924348264132406875276140514499937144456189488436765114374296308467862464924
再利用 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函式作用的看這里
現在已經得到了明文 m 的16進制形式
那么就可以把16進制轉換為字串,即可得到明文
但是又出現了一個問題,我放到在線網站上轉換為字串的時候,轉換不出字串
后來發現這串16進制的字符個數為奇數個,正常的話16進制的字符應該是由兩個 0~f 的陣列成,也就是這串16進制的字符數的個數一定是偶數

可以看到這一串字串的長度為 64-2-1=61 是奇數(減2是因為最前面的0x,減1是因為最后面的L(表示長整型))
于是就把第一個字符刪去,再轉換為字串
其中可見字串即為flag
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/231543.html
標籤:其他
