(原文來(lái)自:
2006-07-28 介紹一個(gè) RSA 加密小工具 bmrsa)
因?yàn)橐鲆粋€(gè)不對(duì)稱(chēng)加密/解密相關(guān)的應(yīng)用(其實(shí)是想用在軟件的注冊(cè)控制方面), 本來(lái)的想法是去找找有沒(méi)有 RSA
加密/解密的源代碼的例子, 結(jié)果在 sourceforge 找到來(lái) bmrsa(RSA Cryptographic Text
Processor), 可以從 http://sourceforge.net/projects/bmrsa 訪問(wèn).
項(xiàng)目 README 里的描述:
This program is an exercise in prime number generation,
RSA key generation, RSA encryption and conversion between
decimal, hexadecimal, base64 and text. Take note that RSA
is generally not used to encrypt entire messages because it
is too slow. It is normally used to encrypt keys used in
other encryption algorithms or other relatively small
values. For more detailed documentation, execute bmrsa
from a command line without passing any arguments. You will
probably want to pipe the output through more like this
試用了一下, 總結(jié)該軟件有如下特點(diǎn):
- 開(kāi)源, GPL 協(xié)議;
- 跨平臺(tái), 而且完全使用 C++ 編寫(xiě), 下載包里包含了 Windows 和 Linux 下的可執(zhí)行文件;
- 命令行程序, 運(yùn)行時(shí)使用 stdin 和 stdout, 應(yīng)該說(shuō)被其它程序調(diào)用還算方便;
- 只能處理文本, 不支持中文, 因此對(duì)于中文文本或者二進(jìn)制文件可能需要先 base64 一下.
我用的是 2003-03-16 16:00 的 bmrsa10.zip 這個(gè)包, 可以從項(xiàng)目主頁(yè)找到下載, 也可以從下面的鏈接下載:
下面簡(jiǎn)單說(shuō)明產(chǎn)生 公鑰/私鑰 和 加密/解密 的整個(gè)過(guò)程:
- 首先將下載后的 bmrsa10.zip 解壓縮到一個(gè)目錄, 進(jìn)入這個(gè)目錄;
- 如果是 linux 環(huán)境下, 為了后面輸入命令方便, 可以執(zhí)行
export PATH=.:$PATH
, 將當(dāng)前目錄加入 PATH; - 首先生成一個(gè) 768 位的密鑰文件 _keys.768-bit.txt:
bmrsa -mkh -g 48 -f _keys.768-bit.txt
- 接走我們建立另外兩個(gè)文本文件 _private-key.768-bit.txt 和 _public-key.768-bit.txt, 分別對(duì)應(yīng)私鑰和公鑰. 這兩個(gè)文件都是對(duì) _keys.768-bit.txt 中內(nèi)容的裁減, 基本上類(lèi)似這個(gè)樣子:
public mod=7ECF58B12DAB4557B9B39589D26CA444BDF96...
private key=3C4B0676352943057A3B6B0D54A8B0E56265B...
private p=ED66018402DEED19082ED5EA500B778DAFA7A0...
private q=88BF09780DC8C15C429AE72AC6F91B0795C4E68...
public mod=7ECF58B12DAB4557B9B39589D26CA444BDF96...
public key=BA562B6FEF44681C8937C54FCB985B205DAF0A...
- 在實(shí)際使用中, 我們可以把公鑰公布出來(lái), 而用私鑰加密傳遞的信息, 接收到信息的人可以使用公鑰對(duì)信息進(jìn)行解密(另外也可以反過(guò)來(lái)使用公鑰加密, 接收方使用私鑰解密);
- 具體到這個(gè)例子中, 也就是說(shuō)我們可以把 _public-key.768-bit.txt 公開(kāi)給需要接收我們的信息的人, 而 _private-key.768-bit.txt 必需妥善保管, 因?yàn)橐坏﹦e人拿到這個(gè)私鑰, 那就意味著他可以冒充你發(fā)送消息了;
- 下面我們建立一個(gè)文本文件 _demo.txt 作為加密的原文:
NAME=thinkbase
URL =http://www.thinkbase.net
IP =218.81.120.31
- 我們使用密鑰 _private-key.768-bit.txt 對(duì) _demo.txt 進(jìn)行加密, 加密后的文件是 _demo.enc.txt
bmrsa -mkh -mit -moh -pr -f _private-key.768-bit.txt <_demo.txt >_demo.enc.txt
- 接收方拿到加密后的文件 _demo.enc.txt 后, 可以使用公鑰 _public-key.768-bit.txt 對(duì)信息進(jìn)行解密:
bmrsa -mkh -mih -mot -pu -f _public-key.768-bit.txt <_demo.enc.txt
具體的運(yùn)行界面參見(jiàn)下圖:


在實(shí)驗(yàn)過(guò)程中使用的一些文件也可以下載, 供參考: