用非对称密码算法制作共享软件的注册码

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等于用户名的十六进制表示

责编:豆豆技术应用

正在加载评论...