(原文來自:
2006-07-28 介紹一個 RSA 加密小工具 bmrsa)
因為要做一個不對稱加密/解密相關的應用(其實是想用在軟件的注冊控制方面), 本來的想法是去找找有沒有 RSA
加密/解密的源代碼的例子, 結果在 sourceforge 找到來 bmrsa(RSA Cryptographic Text
Processor), 可以從 http://sourceforge.net/projects/bmrsa 訪問.
項目 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
試用了一下, 總結該軟件有如下特點:
- 開源, GPL 協議;
- 跨平臺, 而且完全使用 C++ 編寫, 下載包里包含了 Windows 和 Linux 下的可執行文件;
- 命令行程序, 運行時使用 stdin 和 stdout, 應該說被其它程序調用還算方便;
- 只能處理文本, 不支持中文, 因此對于中文文本或者二進制文件可能需要先 base64 一下.
我用的是 2003-03-16 16:00 的 bmrsa10.zip 這個包, 可以從項目主頁找到下載, 也可以從下面的鏈接下載:
下面簡單說明產生 公鑰/私鑰 和 加密/解密 的整個過程:
- 首先將下載后的 bmrsa10.zip 解壓縮到一個目錄, 進入這個目錄;
- 如果是 linux 環境下, 為了后面輸入命令方便, 可以執行
export PATH=.:$PATH
, 將當前目錄加入 PATH; - 首先生成一個 768 位的密鑰文件 _keys.768-bit.txt:
bmrsa -mkh -g 48 -f _keys.768-bit.txt
- 接走我們建立另外兩個文本文件 _private-key.768-bit.txt 和 _public-key.768-bit.txt, 分別對應私鑰和公鑰. 這兩個文件都是對 _keys.768-bit.txt 中內容的裁減, 基本上類似這個樣子:
public mod=7ECF58B12DAB4557B9B39589D26CA444BDF96...
private key=3C4B0676352943057A3B6B0D54A8B0E56265B...
private p=ED66018402DEED19082ED5EA500B778DAFA7A0...
private q=88BF09780DC8C15C429AE72AC6F91B0795C4E68...
public mod=7ECF58B12DAB4557B9B39589D26CA444BDF96...
public key=BA562B6FEF44681C8937C54FCB985B205DAF0A...
- 在實際使用中, 我們可以把公鑰公布出來, 而用私鑰加密傳遞的信息, 接收到信息的人可以使用公鑰對信息進行解密(另外也可以反過來使用公鑰加密, 接收方使用私鑰解密);
- 具體到這個例子中, 也就是說我們可以把 _public-key.768-bit.txt 公開給需要接收我們的信息的人, 而 _private-key.768-bit.txt 必需妥善保管, 因為一旦別人拿到這個私鑰, 那就意味著他可以冒充你發送消息了;
- 下面我們建立一個文本文件 _demo.txt 作為加密的原文:
NAME=thinkbase
URL =http://www.thinkbase.net
IP =218.81.120.31
- 我們使用密鑰 _private-key.768-bit.txt 對 _demo.txt 進行加密, 加密后的文件是 _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 對信息進行解密:
bmrsa -mkh -mih -mot -pu -f _public-key.768-bit.txt <_demo.enc.txt
具體的運行界面參見下圖:


在實驗過程中使用的一些文件也可以下載, 供參考: