openssl
OpenSSL 是一個開源項目,其組成主要包括一下三個組件:
openssl:多用途的命令行工具
libcrypto:加密算法庫
libssl:加密模塊應用庫,實現了ssl及tls
openssl可以實現:祕鑰證書管理、對稱加密和非對稱加密 。
RSA PEM文件格式
1.PEM私鑰格式文件
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
2. PEM公鑰格式文件
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
3. PEM RSAPublicKey公鑰格式文件
-----BEGIN RSA PUBLIC KEY-----
-----END RSA PUBLIC KEY-----
OpenSSL密鑰相關命令
1. 生成密鑰
openssl genrsa -out key.pem 1024
-out 指定生成文件,此文件包含公鑰和私鑰兩部分,所以即可以加密,也可以解密
1024 生成密鑰的長度
2. 提取PEM格式公鑰
openssl rsa -in key.pem -pubout -out pubkey.pem
-in 指定輸入的密鑰文件
-out 指定提取生成公鑰的文件(PEM公鑰格式)
3. 提取PEM RSAPublicKey格式公鑰
openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem
-in 指定輸入的密鑰文件
-out 指定提取生成公鑰的文件(PEM RSAPublicKey格式)
4. 公鑰加密文件
openssl rsautl -encrypt -in input.file -inkey pubkey.pem -pubin -out output.file
-in 指定被加密的文件
-inkey 指定加密公鑰文件
-pubin 表面是用純公鑰文件加密
-out 指定加密後的文件
5. 私鑰解密文件
openssl rsautl -decrypt -in input.file -inkey key.pem -out output.file
-in 指定需要解密的文件
-inkey 指定私鑰文件
-out 指定解密後的文件
ras 的用法如下:
openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg]
[-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-engine id]</pre>
常用選項:
-in filename:指明私鑰文件
-out filename:指明將提取出的公鑰保存至指定文件中
-pubin:根據公鑰提取出私鑰
-pubout:根據私鑰提取出公鑰
示例如下:
rsatool
安裝:
git clone https://github.com/ius/rsatool.git
cd rsatool //進入這個目錄
python setup.py install
提供模數和私有指數,PEM輸出到key.pem:
python rsatool.py -f PEM -o key.pem -n 13826123222358393307 -d 9793706120266356337
提供兩個素數,DER輸出到key.der:
python rsatool.py -f DER -o key.der -p 4184799299 -q 3303891593
項目地址:https://github.com/ius/rsatool
RsaCtfTool
安裝:
安裝之前必須先安裝這四個庫(PyCrypto,GMPY2,SymPy,requests)
git clone https://github.com/Ganapati/RsaCtfTool.git
cd RsaCtfTool //進入這個目錄
安裝python第三方庫
pip install -r requirements.txt
用法一:已知公鑰(自動求私鑰) –publickey,密文 —-uncipherfile。
將文件解壓複製到RsaCtfTool裏:
python RsaCtfTool.py --publickey 公鑰文件 --uncipherfile 加密的文件
用法二:已知公鑰求私鑰。
RsaCtfTool.py --publickey 公鑰文件 --private
用法三:密鑰格式轉換——把PEM格式的公鑰轉換爲n,e
python RsaCtfTool.py --dumpkey --key 公鑰文件
umpkey --key 公鑰文件
用法四:密鑰格式轉換——把n,e轉換爲PEM格式
python RsaCtfTool.py --createpub -n 782837482376192871287312987398172312837182 -e 65537
項目地址:https://github.com/Ganapati/RsaCtfTool
RSAtool
下載地址:http://www.skycn.net/soft/appid/39911.html
RSAtool
是一個非常方便實用的小工具,可以用來計算 RSA 中的幾個參數、生成密鑰、加解密,一些不太複雜的破解工作也可以用它。
我們找一道題爲例,來看看 RSAtool 的基本用法。
還記得 veryeasy RSA 嗎?是不是不難?那繼續來看看這題吧,這題也不難。
已知一段 RSA 加密的信息爲:0xdc2eeeb2782c 且已知加密所用的公鑰:
(N=322831561921859 e = 23)
請解密出明文,提交時請將數字轉化爲 ascii 碼提交
比如你解出的明文是 0x6162,那麼請提交字符串 ab
提交格式:PCTF {明文字符串}
這道題可以用 Python 算出來,用 RSAtool 可以更方便,因爲不用自己去寫腳本。
圖中的
P
、Q
、R
、D
、E
分別就是 RSA 算法中的 p
、q
、N
、d
、e
,右上角選擇進制,注意不要弄錯,e 只有十六進制可用,所以這裏要把 23
換成 17
。將
N=322831561921859
填入,左下角有一個 Factor N
的按鈕,這是分解 N
的意思,點一下,會自動開始分解因數,得到 P=13574881
、Q=23781539,再點一下 Calc. D
,計算出d=42108459725927
,這時可以看到 Test
按鈕不再是灰色,表明可以使用簡單的加解密功能,點它,彈出一個框。第一個框是明文,第二個框是密文,輸入明文
6162
,點擊 Encrypt
,得到密文 178401292768926
,這時就可以使用解密功能(好像必須先用一次加密才行)。密文
0xdc2eeeb2782c
,換算十進制 242094131279916
,點 Decrypt
,直接得到字符串 3a5Y
。