1. 程式人生 > >實驗吧—密碼學—RSA

實驗吧—密碼學—RSA

body href AI color 通過 應用程序 nbsp 掌握 程序

RSA破解

解題鏈接: http://ctf5.shiyanbar.com/crypto/RSA

1.點擊鏈接得到一個壓縮包。點擊開裏面有兩個文件,分別是flag.enc和public.pem這兩個文件。

首先我們會想到openssl。

openssl:是一個安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程序供測試或其它目的使用。

一般做RSA 的題只需用到兩個命令到時候我們在詳細說明。

2.打開kali(kali裏的openssl可以直接使用,但windows下的需要花錢。)

進入終端,輸入openssl進入openssl狀態。

技術分享圖片

輸入這個命令rsa -pubin -text -modulus -in public.pem(public.pem 是你自己的文件名)讀取N 和E。

技術分享圖片

我們看到了N=A41006DEFD378B7395B4E2EB1EC9BF56A61CD9C3B5A0A73528521EEB2FB817A7

E=65537

我們首先將N轉換成10進制,在這裏我使用了python的進制轉換函數 int(x,16)。將16進制轉換成10進制。

技術分享圖片

於是我們得到了N=74207624142945242263057035287110983967646020057307828709587969646701361764263

3.分解N得出P和Q以便求出私鑰D

在這裏介紹兩種方法。(當然我也只會這兩種,本人純小白一枚,python都不太會寫)

第一種:http://factordb.com/這個網站。輸入N基本會分解出P和Q。技術分享圖片

第二種:軟件yafu:用於自動整數因式分解,在RSA中,當p、q的取值差異過大或過於相近的時候,使用yafu可以快速的把n值分解出p、q值,原理是使用Fermat方法與Pollard rho方法

首先打開cmd,進入yafu所在路徑,輸入yafu-64的命令,進入yafu工作階段。輸入factor(74207624142945242263057035287110983967646020057307828709587969646701361764263)點擊回車會出現

技術分享圖片

這樣我們就得到了P=258631601377848992211685134376492365269

Q=286924040788547268861394901519826758027

4.求出D

可在這裏我通過工具求出了D 但無法在openssl中進行解開密文。因為題中所給的密文是flag.enc我們正常沒有辦法打開。而用openssl對其進行解密需要按其格式來的密鑰,即pem後綴。當然腦洞不小的我,嘗試將D放入txt文件中,在進行改文件名。但在openssl中無法使用。我又查了各種enc後綴結尾文件的打開命令,但沒有搜到什麽。於是找了一下,發現可以用pythonq來寫生成可用的私鑰。

於是我們來寫吧。(之前說過不會python,所以代碼借鑒於http://blog.csdn.net/dongyanwen6036/article/details/76900001。)

import math
import sys
from Crypto.PublicKey import RSA
arsa=RSA.generate(1024)
arsa.p=258631601377848992211685134376492365269
arsa.q=286924040788547268861394901519826758027
arsa.e=65537
arsa.n=arsa.p*arsa.q
Fn=long((arsa.p-1)*(arsa.q-1))

#此處原理e*d=Fn*i+1
i=1
while(True):
    x=(Fn*i)+1
    if(x%arsa.e==0):
           arsa.d=x/arsa.e
           break
    i=i+1
private=open(private.pem,w)
private.write(arsa.exportKey())
private.close()

在kali裏運行會在home裏發現生成的private.pem文件。至此我們找到了D

5.解密

在kali終端輸入openssl進入openssl

輸入rsautl -decrypt -in flag.enc(密文名稱) -inkey private.pem(我們所求得密鑰名稱)

技術分享圖片

看這樣我們就得到明文了!

是不是很開心!

註:本人純屬小白,為了自己更好的理解,和掌握知識。不喜勿噴。

實驗吧—密碼學—RSA