当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

用非对称密码算法制作同享软件的注册码[VC/C++编程]

赞助商链接



  本文“用非对称密码算法制作同享软件的注册码[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

网上大大都同享软件的注册码(又称为序列号)的计划都不是很好,对比简单被破解者做出注册机来.下面介绍一种操纵公钥算法(又称为非对称算法)RSA制作注册码的办法.采取这种办法,不知道密钥的话时很难写出注册机来.实际上有部份软件已经利用了这类办法.

大家都知道RSA采取一对密钥,即公钥和私钥,从公钥难于推出私钥,反之亦然,这个难度是基于大数分化的难度.操纵RSA生成同享软件注册码的思绪以下:

1、先随机生成一对公钥E和私钥D;

2、软件作者自己写一个注册机,注册机完成的工作就是把用户名M用私钥D加密,密文C就是注册码.由于密文常常包含不可显示字符,所以最好把密文举行编码,变成可显示字符,比方采取base64、uuencode编码等.

密文C = (M ^ D) mod N

此中^表示乘幂,mod表示求余,N为RSA的模数.

3、同享软件将用户输入的注册码先举行解码(如base64解码等),得到密文,然后用公钥E对密文举行解密,得到明文M',假如明文和用户名相同(即满意M' = M),则阐明注册码精确,不然就是不法的注册码.破解者可以通过跟踪你的软件得到公钥E,但无法得到私钥D.

明文M' = (C ^ E) mod D

有几点需求阐明:

1、模数N太短时不安全,简单被分化.以目前的计算本领,倡议N取值在512-bit以上.但这样注册码的长度也变长了,大概给用户带来不便利.普通要采取大数运算库来实现RSA.

2、随机生成密钥对时,要采取尽大概好的随机数生成算法,不然N还是很有大概被分化.

3、也可以在注册机顶用公钥E对用户名加密得到注册码,在软件中对用户输入的注册码用私钥D举行解密得到用户名.此时公钥E就不能取常用的3、65537等固定值,不然一旦被猜出E,则也可以写出注册机,因为此时破解者可以从你的软件中得到私钥D.

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

zhsread("95D49FD119EF27A9", &N); //初始化模数N

zhsread("76D2A6E2AC86CC99", &D); //初始化私钥D

zexpmod(M, D, N, &C); //计算密文C = (M ^ D) mod N

zswrite(SerialNumber, C); //将C的十进制串表示写入SerialNumber中,即为注册码


  以上是“用非对称密码算法制作同享软件的注册码[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 用非对称密码算法制作同享软件的注册码
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .