上一篇 | 下一篇

用Delphi3编写共享软件

发布: 2008-6-26 20:32 | 作者: admin | 来源: | 查看: 2次

width="84%">用Delphi3编写"共享软件"

湖北省枝江市委办公室(443200)

曹祖权

----本文是笔者用Delphi3编写的几个"共享"的小程序,给程序加入注册功能,让它变成一个"共享软件",然后把它放入你的主页,可免费下载,从而帮助您获得更大的用户群。

----这里需说明的是,本文仅从限制软件功能的侧面,探讨"共享软件"的编写方法。

生成软件登录码

----生成一个稳定的且相对唯一的软件登录码,是"共享软件"赖以生存的基础,所以必须选择一个好的算法来生成软件登录码。

----稳定的涵义是指生成的软件登录码仅与机器的某些固定配置有关,不会因用户的一些日常操作而改变。为叙述方便,本文仅采用了C盘总容量、Windows安装时所输入的用户名、用户使用本软件时所提供的单位全称和用户姓名等信息,根据用户的需要,还可加入硬盘物理参数、主板的标识等等。

----以下生成软件登录码的代码,应放置于软件登录窗口的"生成登录码"按钮的OnClick事件代码中。

   procedure TRegBox.BitBtn1Click(Sender: TObject);

   var users:pchar;

    i:integer;

    n1:longint;

   //n2:longint,s0,s1,s2,s3:string 定义为全程变量

   begin

    i:=255;

    getmem(users,255); //分配内存空间

    getusername(users,i);//获得Windows用户名

    s1:=trim(Edit1.Text);//用户输入的单位全称

    s2:=trim(Edit2.Text);//用户输入的用户姓名

    s0:='jdk' +users +'ue28'; //避免用户名太短

    freemem(users); //释放内存空间

    s1:=s2 +'xwplskf' +s1 +'ruieo';

//合成单位全称和用户姓名

    n1 := DiskSize(3) div 1024 ; //C盘总容量

    n2 :=1 ;

    for i:=1 to length(s1) do //登录码与s1相关联

    n2:=abs((ord(s1[i]) *n2 + $f77)) mod 1000000;

    for i:=2 to length(s0) do

//登录码与s0和C盘容量相关联

    n2:=abs((ord(s0[i]) *n2 +n1)) mod 1000000;

//下面的转换生成8位数字的登录码n2

    n2:=10504007 +abs((n2 +n1) *(length(s1) +length(s0)));

    Edit4.text:=copy(inttostr(n2),1,8);

    n2:=strtoint(copy(inttostr(n2),1,8));

   end;

生成注册密码

----有了登录码,还需要一个单独的程序,采取一定的算法来加密登录码,生成一个注册密码,加密算法的强度越大越好。这个单独的程序即为电子注册密码生成程序,当然它不能提供给任何用户,但需要在提供给用户使用的"共享软件"中"注册"按钮的OnClick事件中,写入等价的代码,以判断用户自己输入的注册密码是否正确。

   procedure Tencodeform.Button1Click(Sender:TObject);

   var n2:longint;

    s1,s2,s4:string;

    i:integer;

   begin

    n2:=strtoint(Edit1.text);

// 用 户 反 馈 的 软 件 登 录 码

    n2:=120873762 +abs((n2 div 133) *171 xor 39639421);

    s1:=copy(inttostr(n2),1,8);

    s2:='73461852';

    s4:=''; //s4 : 由n2 变 换 生 成 的 注 册 密 码

    for i:=1 to 8 do

    s4:=s4 +s1ord(s2[i]) -ord('1') +1〗;

    // 在Edit2 编 辑 框 显 示 生 成 的 注 册 密 码,

将 它 告 诉 申 请 的 用 户

    Edit2.text:=s4;

   end;

注册

----用户通过单击"注册"按钮,来实现软件的注册,这一段代码要完成以下功能:

程序自动生成的注册密码;

用生成的注册密码与用户输入的注册密码进行核对;

如果一致,则关闭"注册"菜单项,并在缺省目录下创建一个注册文件,这个文件包括以下内容:

  [USER]

  单位全称、用户姓名、电话号码、[CODE〗

  注册码=XXXXXXXX

  "注册"按钮的OnClick事件代码如下:

   procedure TRegBox.BitBtn2Click(Sender: TObject);

   var myfile:textfile;

    i:integer;

   begin

    s5:=trim(Edit5.text);//s5=用户输入注册密码

    //以下代码对n2进行变换生成注册密码

    n2:=120873762 +abs((n2 div 133) *171 xor 39639421);

    s1:=copy(inttostr(n2),1,8); //8 位 数 字

    s2:='73461852'; //移位变换

    s4:='';//s4=程序自动生成的注册密码

    for i:=1 to 8 do

    s4:=s4 +s1ord(s2[i]) -ord('1') +1〗;

    if strtoint(s4) *7<>strtoint(s5) *7 then begin

    MainBox.r2.Visible:=True; //打开"注册"菜单

    Edit4.Text:=''; //清空登录码

    Edit5.Text:=''; //清空注册密码

    MessageDlg('注册码不对,请核对后再注册!', mtWarning, [mbOk], 0)

    end

    else begin //注册成功后,创建一个注册文件

    MainBox.r2.Visible:=False;

    assignfile(myfile,'wps2word.log');

    rewrite(myfile);

    writeln(myfile,'[ER\IS]');

    writeln(myfile,'单位全称=',trim(Edit1.Text));

    writeln(myfile,'用户姓名=',trim(Edit2.Text));

    writeln(myfile,'电话号码=',trim(Edit3.Text));

    writeln(myfile,'CODE]');

    writeln(myfile,'注册码=',s4);

    closefile(myfile);

    MessageDlg

('注册码成功,谢谢您使用本软件!', mtWarning, [mbOk\], 0)

    end;

   end;

字号: | 推荐给好友

31/3123>

评分:0

我来说两句