错,怎么会输入两个密码呢?Paradox自己的密码可以使用Session控件,使其不出现密码提示框。
解决方案 »
- 求完整的DLL 封装非模式窗体方法(撤底解决给200)
- 如何获得ActiveForm所在网页中的IP地址?
- 跪求一文本转化为ACCESS数据库的方法
- 这样做错在哪 里呀:
- 有一个date型的数据和一个time型的数据,请问如何把他们两个合成一个datetime型数据
- 我也开论坛了:http://www.soulan.com/kingron/bbs
- 怪事,Qreport出问题了,打印时自动退出
- HOOk问题,真头疼.对HOOK有研究的大哥,进来看看.
- 我是新手,问一个很简单的问题,怎么样捕获TADOQuery的错误?在线等待
- 如何在程序运行的时候知道自己机器的ip地址?谢谢
- 如何为一个Paradox表用语句创建同名的VAL文件?
- 各位仁兄:关于ReportBuilder5.55用户手册的中文资料
北京燕山石化计算中心软件开发部 (102500) 吕彤
许多用户可能曾为数据被人盗用而苦恼,或因软件没有一套严密的安全防护系统而不
敢放心使用,或对自己制作的数据加密程序的加密效果大不满意。这里笔者用Delphi提供
了一个简单而有效的解决办法。
Delphi 的所有版本无一例外地提供了对其Paradox数据库的口令设置,设置过口令的
Paradox 数据库的数据也被加密而无法用其它工具查看。我们可以利用这一特性来提高
Delphi应用程序的安全性。
不过要说明的是:本方法所论的加密并非万无一失,因为电脑黑客们无所不在,他们可
能会击破任何加密方法,但就一般人而言本文所论的加密方法就足够了。下面介绍实现步
骤。
实现步骤
1. 首先,一套软件的安全性包括对数据访问的限制,未授权的用户不能访问其中的某
些数据或者根本不能进入应用程序。据此可以设计一个数据表,用来存储用户的级别、用
户的登录名称以及用户密码,不妨将此表命名为 PARA.DB。PARA.DB 的结构如下:
字段名 字段类型 字段长度 注释
Owner A 20 应用程序名
User A 10 用户名
UserLevel A 10 用户级别
PasswordID A 10 登录口令
考虑到用户开发的应用程序可能不止一个,所以Owner字段用来识别PARA.DB所属的应
用程序,以防止一个PARA.DB能适用于所有应用程序;后三个字段用来给用户设置使用权限
。所有的字段都十分重要,但是如果应用程序是单用户的,只需要一个简单的口令,则可以
省略User、UserLevel甚至Owner字段,只留一个登录口令字段PasswordID。
2. 然后,我们需要下面两个函数。
(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.
注意:限于篇幅,以上均为函数程序示意,不宜直接运行,读者可根据需要进行完善。
3. 为了不在每一个应用程序中都重新写一遍函数代码,我们可以将这两个函数放进
一个DLL文件chkpword.dll中,并在chkpword.dpr的project source中作如下声明:
exports GetPassword,SetPassword;
在包含该函数体的unit中分别作如下声明:
function GetPassword:Boolean;export;
function SetPassword:Boolean;export;
4. 在应用程序的有关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. 当用DataBase DeskTop创建para.db的时候,请注意为其添加密码mypassword。在
应用程序的project source中或调用para.db之前必须用
Session.AddPassword(‘mypassword');来为para.db作好开启准备,以免用户发现p
aradox提供的登录对话框。
2. 用本方法所作的口令是对大小写敏感的,这一点请在编制程序的时候予以充分注
意。若要避免大小写敏感,可以将口令判断代码改写为:
UpperCase(EditInputPass.Text)<>UpperCase(TablePara.Fields[3].asstring)
3. 要想分别在Delphi 1.0至3.0开发的应用程序中调用这两个函数,最方便的办法是
在不同版本的Delphi中分别编译chkpword.dpr。
这样,我们就利用Delphi的paradox数据库为我们提供的加密功能给应用程序加上了
安全保护模块。