(原文来自: 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 中内容的裁减, 基本上类似这个样子:
    • _private-key.768-bit.txt
public mod=7ECF58B12DAB4557B9B39589D26CA444BDF96...
private key=3C4B0676352943057A3B6B0D54A8B0E56265B...
private p=ED66018402DEED19082ED5EA500B778DAFA7A0...
private q=88BF09780DC8C15C429AE72AC6F91B0795C4E68...
  • 和:
    • _public-key.768-bit.txt
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

具体的运行界面参见下图:




在实验过程中使用的一些文件也可以下载, 供参考: