Delphi程序的时限和加密

原创 2005年05月31日 18:42:00
Delphi程序的时限和加密
日期:2005年5月31日 作者:BUCK FORLAND 人气: 146 查看:[大字体 中字体 小字体]
本例中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)+j);
j:=(iiii mod (i+30))+(ii mod (i+20))+i3+1;
Str1:=Str1+chr(ord(TempStr)+j);
End;
Result:=Str1;
end;

(出处:DelphiFans.com

控制程序的使用时限TimeLimit

  • 2009年06月17日 14:51
  • 35KB
  • 下载

delphi sqlite3 AES加密程序

  • 2015年03月17日 11:02
  • 693KB
  • 下载

从网上整理的一些delphi字符串加密解密方法

function Encode(Str: string): string; var //加密   TmpChr: AnsiChar;   i, Len: integer; begin   R...

用DELPHI实现文件加密压缩

http://blog.csdn.net/Jason009/article/details/1255787 作者 : wnhoo 标题 : 用DELPHI实现文件加密压缩 ...

Delphi加密解密算法

http://www.cnblogs.com/huangygdelphi/articles/2283465.html // 加密方法一(通过密钥加密解密) function EncryptStri...

Delphi2010 MD5加密的方法

在Delphi2010及上以版本中,可以用TIdHashMessageDigest5对字符和流进行MD5加密,MD5加密是不可逆的,即不能解密,银行系统用户密码就是MD5加密,如果您的密码丢失,只能重...

用DELPHI实现文件加密压缩

概述: 在这篇文件中,讲述对单个文件的数据加密、数据压缩、自解压的实现。同样,也可以实现对多个文件或文件夹的压缩,只要稍加修改便可实现。 关键字:加密压缩、Zlib、流、资源文件 引 言...
  • my98800
  • my98800
  • 2016年09月29日 11:33
  • 153

Delphi使用wxsqlite加密Sqlite数据库

提起桌面数据库,Sqlite谁都知道,但对于它的加密一直困扰着很多人,而delphi的加密使用范例更少。在网上混了两天,查找了一些Sqlite加密的相关资料,也知道了wxsqlite这个东西,它是一个...
  • hsx799
  • hsx799
  • 2015年08月04日 16:46
  • 443

Delphi“流”实现文件加密器

数据流是面向对象程序设计语言中面向对象思想的典型体现,它彻底地取代了早期的利用函数实现输入输出的功能,克服了用函数实现输入输出功能的诸多弊端。简单来说,流就是建立在面向对象基础上的一种抽象的处理数据的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delphi程序的时限和加密
举报原因:
原因补充:

(最多只允许输入30个字)