用非对称密码算法制作共享软件的注册码
http://tech.ddvip.com 2006年03月30日 社区交流
本文详细介绍用非对称密码算法制作共享软件的注册码
4、这种方法只是为了防止被人写出注册机,它无法防止通过修改程序中跳转指令的方法来破解你的软件。为了防止别人修改你的程序文件,可以用注册码中的一部分来加密你的程序代码或数据。
5、这种方法稍加改动即可防止正版用户散发注册码,即采用一机一码的方法,将用户名替换成用户机器的硬软件信息即可,这个硬软件信息应能唯一地表示用户的机器,否则也容易被伪造。
6、采用了上面的方法之后,只有知道至少一个合法注册码的人才能将程序破解。
下面举一个例子,采用大数运算库Freelip(http://www.und.nodak.edu/org/crypto/crypto/numbers/programs/freelip/freelip_1.1.tar.gz)来实现RSA。该库是用C写的,商业使用需要许可证。
1、首先随机生成密钥对。可以自己编程随机搜索大素数。此处由于是举例,我们采用RSATool(http://www.secretashell.com/TMG/RSATool2v15.zip)生成64-bit RSA的参数:
大素数P = A57F2B33, 大素数Q = E7C441B3, 模数N = 95D49FD119EF27A9, 私钥D = 76D2A6E2AC86CC99, 公钥E = 65537
2、制作注册机。将用户名用私钥D进行加密,得到的密文作为注册码:
首先定义宏WIN32(VC自带,但BCB中需要自己定义),然后包含头文件"lip.h":
#ifndef WIN32
#define WIN32
#endif
#include "lip.h"
并把"lip.c"加入到project中。
然后将用户名的ASCII码转换成相应的十六进制串:
char UserName[] = "4E6574677579";
char SerialNumber[256];
verylong N = 0, D = 0, M = 0, C = 0; //Freelip中的大数类型为verylong。
zhsread( UserName, &M); //初始化明文M,M等于用户名的十六进制表示
责编:豆豆技术应用