Delphi编写网络程序的安全措施

来源: 作者: 2007-12-12 出处:pcdog.com

安全  加密  数据库  
下一页 1 2 

  一、 原理

  目前进行数据加密的方法很多,对数据的保护起到一定的作用。但如果采用固定的密钥或是密钥随数据一起传送,则均不能达到令人满意的保密效果。
在实践过程中,我摸索出了一套“请求-应答”模式的随机密钥方法,对密码和数据的保密效果都令人十分满意。

  当客户端程序启动并企图与服务器程序建立连接时,客户程序从服务器端取得一个由服务器程序产生的随机字串,系统将以此字串为密钥来传送用户登录密码和数据。由于密钥由服务器程序随机产生,客户每次登录时密钥均不相同,因此大大减少了密码被拦截导致数据被窃的可能性。

  服务器端可以在远程数据模块中引出一个自定义接口,该接口返回一个随机字串。远程数据模块要记录该字串作为后续处理的密钥。随机字串的产生法可以多种多样,最简单的方法是用Random()函数产生一个随机数后再由此数用Format()函数或IntToStr()产生一个字符串。

  二、 用户登录措施

  为了防止程序被非法调试从而泄露密码,必须将客户的登录信息在服务器端处理,也可以专门增加一个安全层负责客户的登录。客户的登录信息储存在客户资料表中,包括用户名、密码、权限等信息。

    客户程序登录时,先调用服务器程序的接口获得密钥字串,并用此密钥对用户输入的用户名和密码进行加密并向服务器发送登录信息。加密算法可以是DES算法或其它有效算法。服务器接到登录信息后,先用先前产生并记录的随机密钥对登录信息进行解密,再将解密后的信息与存储的客户资料表中的信息进行对照,从而判断客户信息是否合法以及该客户享有的数据权限等。

    该过程的客户端程序如下:

  strKey:=myRemoteSever.GetKey();

  {调用服务器的接口获得随机密钥}

  UserName:=Ency(strUserName,strKey);

  {对用户名加密,Ency()为加密算法}

  Password:=Ency(strPassword,strKey);

   {对登录密码进行加密}

  If myRemoteServer.LogIn(UserName,Password) then {登录}

   Begin

  {进行处理}

   End;

  服务器端的登录过程LogIn()如下:

  strUserName:=DeEncy(UserName,strKey);

   {对用户名解密,DeEncy()为解密算法}

  strPassword:=DeEncy(Password,strKey);

   {对登录密码解密}

  {查询数据库}

  if (Pass) then

   Result:=true

  Else

   Result:=false;

  要注意的是,在服务器程序和客户程序中,StrKey均应定义为全程变量。

  为了防止客户资料表被程序外打开从而泄露密码,可以对客户资料进行一定的加密措施,例如PARADOX表可以添加Password,服务器程序在访问客户资料表时先提供该Password。
更多内容请看PCdog.com--Sniffer安全技术  路由安全配置  网路安全基础专题
下一页 1 2 
上一篇:用DELPHI在状态栏中显示进程条
下一篇:Delphi图像存取另类解决方案