下一页
上一页

为应用程序添加口令

北京燕山石化计算中心软件开发部
吕彤
----不知您是否曾为数据被人盗用而苦恼;不知您是否因软件没有一套严密的安全防护系统而不敢放心使用;不知您是否曾经费尽心机作过数据加密但是对加密效果大不满意?如果您曾有过诸如此类的困惑的话,Delphi为您提供了一个简单而出色的解决办法。

----这似乎是在吹嘘Delphi的功能,但Delphi的所有版本无一例外地提供了对其Paradox数据库的口令设置,设置过口令的Paradox数据库的数据也被加密而无法用其它工具查看。这一特性使得我们用Delphi提高应用程序的安全性变得简单易行。不过要说明的是:本方法所论的加密并非万无一失,因为电脑黑客们无所不在,他们可以轻易地打破你的任何加密方法,但就一般人而言本文所论的加密方法就足够了。

----一、首先,一套软件的安全性包括对数据访问的限制。未授权的用户不能访问其中的某些数据或者根本不能进入应用程序。据此可以设计一个数据表,用来存储用户的级别、用户的登录名称以及用户密码,不妨将此表命名为PARA.DB。PARA.DB的结构如下:

字段名字段类型字段长度注释
OwnerA20应用程序名
UserA10用户名
UserLevelA10用户级别
PasswordIDA10登录口令
----考虑到您开发的应用程序可能不止一个,所以Owner字段用来识别PARA.DB所属的应用程序以防止一个PARA.DB能适用于所有应用程序;后三个字段用来给用户设置使用权限。所有的字段都十分重要,但是如果您的应用程序是单用户的、只需要一个简单的口令的话则可以省略User、Userlevel甚至Owner字
段而只留一个登录口令字段PasswordID。

----二、然后,我们需要两个函数:
----1、GetPassword-读取用户的输入,并判断口令的正确性和用户的级别。
function GetPassword : Boolean;
{根据返回值来判断是否输入了正确口令}
var
PasswordForm: TPasswordForm;{口令登录屏幕}
begin
Result := False;
PasswordForm := TPasswordForm.Create(Self);
if Passwordform.TablePara.fields[0].asstring = '' then
{如果没有任何口令则不启动口令登录屏幕}
begin
Result := True;
PasswordForm.Free;
end
else
try
with PasswordForm do
begin
if ShowModal = mrOK then
if EditInputPass.Text < > TablePara.Fields[3].AsString then
Application.MessageBox('密码错误!', '错误', mb_OK + mb_iconstop)
else
begin
Result := True;
Table1.Close;
end;
finally
PasswordForm.Free;
end;
end;
2、SetPassword -设置用户级别和登录口令。
function SetPassword : Boolean;
var
Chgpassform : TChgpassform;
begin
Result := False;
Chgpassform := TChgpassform.Create(Self);
if Chgpassform.ShowModal = mrOK then
begin
With TablePara do
beign
{写入库中}
Edit;
Fields[2].AsString := EditPasswordID.Text;
Post; Close;
end;
Result := True;
Chgpassform.free;
end;
end;
----(注:限于篇幅,以上均为函数程序示意,若直接运行可能有误。)
----三、为了不在每一个应用程序中都重新写一遍函数代码,我们可以将这两个函数放进一个DLL文件chkpword.dll中,并在chkpword.dpr的projectsource中作如下声明:

expor GetPassword,SetPassword;
在包含该函数体的unit中分别作如下声明:
function GetPassword:Boolean;export;
function SetPassword:Boolean;export;

四、在应用程序的有关unit中作如下声明:
function GetPassword:Boolean;far;external'CHKPWORD';
function SetPassword:Boolean;far;external'CHKPWORD';
则引用方法为:
unit{unit名};
uses
{uses说明}
function GetPassword:Boolean;
far;external'CHKPWORD';
begin
if getpassword then
{没有设置口令或得到正确的口令后才执行程序}
begin
{程序段代码}
.
.
.
{或:SetPassword}
end;
end.
----五、注意事项
----1、当您用DataBaseDeskTop创建para.db的时候,请注意为其添加密码mypassword。在应用程序的projectsource中或调用para.db之前您必须用Session.AddPassword('mypassword');来为para.db作好开启准备,以免用户发现paradox提供的登录对话框。

----2、用本方法所作的口令是对大小写敏感的,这一点请在编制程序的时候予以充分的注意。若要避免大小写敏感请改写口令判断代码为:

----UpperCase(EditInputPass.Text)<>UpperCase(TablePara.fields[3].asstring)

----3、要想分别在delphi1.0至3.0开发的应用程序中调用这两个函数,最方便的办法是在不同版本的delphi中分别编译chkpword.dpr。

----这样,我们就利用delphi的paradox数据库为我们提供的加密功能轻松地给应用程序加上了安全性维护模块。

下一页
上一页

回首页