[网页高手]
Homepage
[网络编程]
Programe
[图形图像]
Picture
[冲浪宝典]
Insernet
[操作系统]
System
[软件教学]
Software
[数码时代]
Didgtale
[安全防御]
Didgtale
[IT学院]
Education
    
 
Google Web tongyi.net
 
    你的位置:首页 > 网络编程 > 其它编程 > Delphi程序的时限和加密
网络编程
  ASP

PHP

JSP

CGI

ASP.NET

C#.NET

SQL Server

Mysql

ORACLE

其它编程

 
Delphi程序的时限和加密

本例中TRegistry是关键类,Delphi 4.0不能自行加入,需在uses部分手工加入“registry”,通过其方法“ReadString”和“WriteString”来读出和写入字符,亦可通过其方法“ReadDate”和“WriteDate”来读出和写入日期。 



程序第一次运行就写入其运行时间,应用期限为30天,超过30天就不再运行。全局变量NoRegistry、SpareDays来分别判断是否注册和剩余期限,自定义函数Encrypt为用户名到密码的变换函数。 



一、程序启动时,通过搜索注册表,判断是否第一次运行和是否注册,来确定程序是否运行。 

procedure TForm1.FormCreate(Sender: TObject);

var

Reg:Tregistry;

KeyName,TempCode,TempName,TempStr:string;

Same:Integer;

FirstDate,NowDate:Tdatetime;

NumberOfDays:real;

begin

NoRegistry:=true;

NowDate:=date; //取得运行时系统日期

try

//创建注册表,有该键则读取,无则创建

Reg:=Tregistry.Create ;

Reg.RootKey :=hkey_local_machine;

KeyName:='Software\jsjb\Example';

if Reg.OpenKey(KeyName,true) then

begin

TempName:=Reg.ReadString('UsrName');

TempCode:=Reg.ReadString('Passwd');

//读取用户名,注册号

try

FirstDate:=Reg.ReadDate('Date');

//非第一次则读入第一次运行时间

except

Reg.WriteDate('Date',NowDate);

// 若为第一次运行,则写入系统日期

FirstDate:=NowDate;

end;

end ;

reg.CloseKey ;

finally

reg.Free ;

end;

TempStr:=Encrypt(TempName);

//通过自定义函数Encrypt()来获取密码

Same:=CompareText(TempStr,TempCode);

//比较密码

if TempName<>'' then

if Same=0 then

NoRegistry:=false;

//验证密码,通过NoRegistry为false

if NoRegistry then

begin //若未注册...

NumberOfDays:=Nowdate-FirstDate;

SpareDays:=round(31-NumberOfDays);

Label1.Caption :=FloatToStr(SpareDays);

if((NumberOfDays>31) or (NumberOfDays<-1)) then

begin

showmessage('程序未注册超过试用期或更改系统时间,将终止运行!');

application.Terminate;//超过30天,则禁止运行
end;

end;

end;

 


二、注册过程,其响应入口可放于"About"内。 

procedure TAbout.Button1Click(Sender: TObject);

var

InptName,InptCode,RealCode:String;

Same:Integer;

Reg:Tregistry;

Keyname:String;

begin

if NoRegistry then //未注册时做

begin

RealCode:='';

InptName:= InputBox('注册', '输入你的名字', '');

if InptName<>'' then

begin

InptCode:= InputBox('注册', '输入注册号', '');

RealCode:=Encrypt(InptName);

Same:=CompareText(RealCode,InptCode);

if (Same<>0) then

showmessage('注册号码不对,注册未成功!')

else

begin

//密码匹配时做:把用户名、密码写入注册表

Try

Reg:=Tregistry.Create ;

Reg.RootKey :=hkey_local_machine;

KeyName:='Software\jsjb\Example';

if Reg.OpenKey(KeyName,true) then

begin

Reg.WriteString('Passwd',InptCode);

Reg.WriteString('UsrName',InptName);

end;

reg.CloseKey ;

finally

Reg.Free ;

end;

NoRegistry:=false;

//可修改注册后的界面

end;

end;

end;

end; 


三、密码的变换函数。此变换函数可由读者自由发挥,在此,仅示一例而已。 

Function TForm1.Encrypt(TempStr:string):string;

Var

Str1:String;

i,j:Integer;

Begin

Str1:='';

For i:=1 to Length(TempStr) do

begin

j:=(iiii mod (i+30))+(ii mod (i+20))+i3+1;

Str1:=Str1+chr(ord(TempStr[i])+j);

j:=(iiii mod (i+30))+(ii mod (i+20))+i3+1;

Str1:=Str1+chr(ord(TempStr[i])+j);

End;

Result:=Str1;

end;

 



此程序在Windows98,Delphi 4.0下调试通过。
     打印本文 | 推荐朋友 | 收藏文章 | 关闭窗口
 
 

    相关文章
 用CSS滤镜实现图片暗室效果    (2001年12月19日)

 Java列表对象的性能分析和测试    (2001年12月12日)

 编辑VFP选单常见问题的解决方法    (2001年12月6日)

 用VFP管理网页文件    (2001年12月4日)

 Java服务器端编程安全必读    (2001年11月30日)

 Vsiaul C#如何读取注册信息    (2001年11月28日)

 java中关于html的转换    (2001年11月27日)

 利用JDOM开发日文外来语网路电子辞典    (2001年11月21日)

 
 

 

关于统一 | 联系合作 | 统一作品 | 版权申明 | 建站服务 | 更多说明
Copyright 2000-2003 Tongyi All rights reserved. 京ICP备05005608号