网站建设| 数据库类| 图形图象| 程序设计| 现代办公| 操作系统| 考试认证| 网络技术| 软件工程| 电脑相关| 文学作品
网站开发| 网页制作| 操作系统| 图象图形| 考试认证| 数据库类| 程序设计| 硬件技术| 现代办公| 网络技术| 笑话频道
 
您的位置: 电脑书库首页-> 电脑文摘-> 程序设计-> Delphi/Pascal-> 为应用程序添加口令

为应用程序添加口令
作者:佚名 来源:InterNet 加入时间:2004-11-22
相关文章 相关书籍:
  • Java黑客大曝光_开发安全的Java应用程序
  • Java应用程序开发LINUX平台
  • JavaCard应用程序开发
  • C#应用程序开发全程演练
  • com+与vb6分布式应用程序设计
  • 北京燕山石化计算中心软件开发部
    吕 彤

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

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

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

    ---- 二、 然 后, 我 们 需 要 两 个 函 数:

    ---- 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 的project source 中 作 如 下 声
    明:

    exports 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、 当 您 用DataBase DeskTop 创 建para.db 的 时 候, 请 注 意 为 其 添 加 密 码mypassword。 在
    应 用 程 序 的project source 中 或 调 用para.db 之 前 您 必 须 用 Session.AddPassword('mypassword'); 来
    为para.db 作 好 开 启 准 备, 以 免 用 户 发 现paradox 提 供 的 登 录 对 话 框。

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

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

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

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


    [文章录入员:fightter]

    相关文章 相关书籍:
  • Java黑客大曝光_开发安全的Java应用程序
  • Java应用程序开发LINUX平台
  • JavaCard应用程序开发
  • C#应用程序开发全程演练
  • com+与vb6分布式应用程序设计
  • 本站推荐内容

    近期主机类热搜关键词:
    美国服务器 美国服务器租用 海外服务器租用 国外服务器租用

    Delphi/Pascal
    C/C++/VC
    C++Builder
    Basic/VB类
    Delphi/Pascal
    Java编程
    FORTRAN
    其它
    电脑教程阅读排行
    ·DELPHI下的多线程程序设计(...
    ·Delphi与Excel的亲密接...
    ·Delphi实现串口通信的常用的...
    ·Delphi中初始化.Ini文件...
    ·Delphi中用于读写(I/O)...
    ·谈谈Delphi中的类和对象
    ·Delphi编译错误中文手册
    ·Delphi中关于TApplic...
    ·OPENGL图形程序设计
    ·SQL的基本操作