
首發(fā)地址:我的個人博客
openssl
OpenSSL 是一個開源項目,其組成主要包括一下三個組件:
openssl:多用途的命令行工具
libcrypto:加密算法庫
libssl:加密模塊應用庫,實現(xiàn)了ssl及tls
openssl可以實現(xiàn):秘鑰證書管理、對稱加密和非對稱加密 。
RSA PEM文件格式
1.PKCS#1私鑰格式文件
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
2.PKCS#8私鑰格式文件
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
3. PEM公鑰格式文件
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
4. PEM RSAPublicKey公鑰格式文件
-----BEGIN RSA PUBLIC KEY-----
-----END RSA PUBLIC KEY-----
OpenSSL密鑰相關命令
1. 生成PKCS#1私鑰
openssl genrsa -out rsa_prikey.pem 1024
-out 指定生成文件,此文件包含公鑰和私鑰兩部分,所以即可以加密,也可以解密
1024 生成密鑰的長度(生成私鑰為PKCS#1)
2.把RSA私鑰轉換成PKCS8格式
openssl pkcs8 -topk8 -inform PEM -in rsa_prikey.pem -outform PEM -nocrypt -out prikey.pem
3. 根據(jù)私鑰生成公鑰
openssl rsa -in rsa_prikey.pem -pubout -out pubkey.pem
-in 指定輸入的密鑰文件
-out 指定提取生成公鑰的文件(PEM公鑰格式)
4. 提取PEM RSAPublicKey格式公鑰
openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem
-in 指定輸入的密鑰文件
-out 指定提取生成公鑰的文件(PEM RSAPublicKey格式)
5. 公鑰加密文件
openssl rsautl -encrypt -in input.file -inkey pubkey.pem -pubin -out output.file
-in 指定被加密的文件
-inkey 指定加密公鑰文件
-pubin 表面是用純公鑰文件加密
-out 指定加密后的文件
6. 私鑰解密文件
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:根據(jù)公鑰提取出私鑰
-pubout:根據(jù)私鑰提取出公鑰
示例如下:

rsatool
安裝:
git clone https://github.com/ius/rsatool.git
cd rsatool //進入這個目錄
python setup.py install
提供模數(shù)和私有指數(shù),PEM輸出到key.pem:
python rsatool.py -f PEM -o key.pem -n 13826123222358393307 -d 9793706120266356337
提供兩個素數(shù),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 加密的文件

用法二:已知公鑰求私鑰。
python RsaCtfTool.py --publickey 公鑰文件 --private

用法三:密鑰格式轉換——把PEM格式的公鑰轉換為n,e
python RsaCtfTool.py --dumpkey --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 中的幾個參數(shù)、生成密鑰、加解密,一些不太復雜的破解工作也可以用它。
我們找一道題為例,來看看 RSAtool 的基本用法。
還記得 veryeasy RSA 嗎?是不是不難?那繼續(xù)來看看這題吧,這題也不難。
已知一段 RSA 加密的信息為:0xdc2eeeb2782c 且已知加密所用的公鑰:
(N=322831561921859 e = 23)
請解密出明文,提交時請將數(shù)字轉化為 ascii 碼提交
比如你解出的明文是 0x6162,那么請?zhí)峤蛔址?ab
提交格式:PCTF {明文字符串}
這道題可以用 Python 算出來,用 RSAtool 可以更方便,因為不用自己去寫腳本。

圖中的
P、Q、R、D、E 分別就是 RSA 算法中的 p、q、N、d、e,右上角選擇進制,注意不要弄錯,e 只有十六進制可用,所以這里要把 23 換成 17。將
N=322831561921859 填入,左下角有一個 Factor N 的按鈕,這是分解 N 的意思,點一下,會自動開始分解因數(shù),得到 P=13574881、Q=23781539,再點一下 Calc. D,計算出d=42108459725927,這時可以看到 Test 按鈕不再是灰色,表明可以使用簡單的加解密功能,點它,彈出一個框。
第一個框是明文,第二個框是密文,輸入明文
6162,點擊 Encrypt,得到密文 178401292768926,這時就可以使用解密功能(好像必須先用一次加密才行)。密文
0xdc2eeeb2782c,換算十進制 242094131279916,點 Decrypt,直接得到字符串 3a5Y。