错,怎么会输入两个密码呢?Paradox自己的密码可以使用Session控件,使其不出现密码提示框。

解决方案 »

  1.   

    我在网上曾经看过,一篇文章介绍了一个通用密码,用来对Paradox库进行解锁,我建议你使用其它类型的数据库或者使用加密算法进行加密。
      

  2.   

    给篇文章给你看,不知道对你有没有用?为应用程序添加口令
                         北京燕山石化计算中心软件开发部 (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数据库为我们提供的加密功能给应用程序加上了
    安全保护模块。