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

2016-02-19 14:42 4 1 收藏

今天图老师小编给大家展示的是Delphi编写网络程序的安全措施,精心挑选的内容希望大家多多支持、多多分享,喜欢就赶紧get哦!

【 tulaoshi.com - 编程语言 】

  一、 原理

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

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  服务器端可以在远程数据模块中引出一个自定义接口,该接口返回一个随机字串。远程数据模块要记录该字串作为后续处理的密钥。随机字串的产生法可以多种多样,最简单的方法是用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均应定义为全程变量。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  为了防止客户资料表被程序外打开从而泄露密码,可以对客户资料进行一定的加密措施,例如PARADOX表可以添加Password,服务器程序在访问客户资料表时先提供该Password。

  三、 数据传送

  在网络程序中,一些敏感数据在网上传送时必须加密。Delphi的MIDAS机制提供了数据加密的途径,可以在数据传往客户端之前对一些字段进行加密,也可以在接收到客户端的更新数据请求后对来自客户端的数据的相应字段进行解密后才向数据库进行更新。为了达到些目的,可以在服务器程序的远程数据模块中加入一个Tprovider或是TdataSetProvider对象,并将此对象的DataSet属性置为要处理的数据集。在Tprovider的OnGetData事件中加入如下代码:

   with DataSet do  begin   while not EOF do   begin   Edit;   SensitiveData.AsString :=   Ency(SensitiveData.AsString,strKey);   {对敏感数据加密}   Post;   Next;   end;   end;

   以上代码可以将敏感数据加密后再送往客户程序。

  同样,在Tprovider的OnUpdateData事件中加入一些处理代码便可对客户端送来的数据进行解密。

  以上只是介绍了网络程序安全措施实现的一般原理,在此基础上,可以增加其它保密措施,以达到更好的保密效果。例如,客户程序可以用特定的辅助硬件设备来增加安全性。在智能卡应用程序中,客户程序在登录时不仅要求用户输入用户名和密码,程序同时检查IC读写器中IC卡的类型及特定的内容,这样,既使密码泄露了不会被人冒名登录。当然,任何安全措施都不是绝对安全的,安全措施还要有严格的保密制度及使用人员的高度的保密意识才能真正起到保密作用。

来源:http://www.tulaoshi.com/n/20160219/1607631.html

延伸阅读
标签: Delphi
  当你完成一个应用软件的开发后,那么你还需要为该软件做一个规范化的安装程序,这是程序设计的最后一步,同时也是很重要的一步,因为运行安装程序往往是用户做的第一步操作。 很多报刊文章介绍了许多如何利用installshield等工具软件来制作安装程序的方法,这种办法可以很快建立起较常见的安装模式,但用这种办法也有一些...
又到六一!你的宝宝快乐吗? 在采访中,华东师范大学学前教育系的周念丽老师提到这样一件事:去年某电视台全程跟踪某几个家庭的六一活动——大型航模比赛。活动结束后,记者问及宝宝高兴不高兴,结果宝宝竟然说到:“不高兴!”因为他想要一个小风轮,可以自己操控,却被爸妈拒绝。 六一这个每年都有的节日,究竟怎样来过才能让宝宝真正地快乐...
孕期旅行须注意的事宜 怀孕中期,孕妇在行动上,不似初期必须有所顾忌。濒临生产时刻,大部分时间都待在家里不敢动,难得有这个既稳定又空暇的时间。倒不如在这时做一下短程旅行,让生活充满闲情逸致,对胎儿而言,亦不失是一个不错的胎教方法。 1.旅行准备 在旅行之前,先做好旅行计划,不要让准妈妈及胎儿太劳累,避开人多、嘈杂的地...
一、不学爬就学走两大影响 “宝宝真聪明,没学爬就开始学走了。”很多妈妈都把宝宝过早学走路看成是聪明健康的表现,不等经历爬的过程就直接教他走路了。 专家解释说,宝宝的脑神经及骨骼、肌肉发育都需要一个过程,由坐到爬、再到走是这一过程的相应表现。之所以先让宝宝学爬是因为这时候他的骨头特别柔软,很难支撑整个身...
标签: Java JAVA基础
  作者:徐春金 JSP默认是以多线程方式执行的,这是JSP与ASP,PHP,PERL等脚本语言不一样的地方,也是它的优势之一,但如果不注意多线程中的同步问题,会使所写的JSP程序有难以发现的错误。下面以一个例子说明JSP中的多线程问题及解决方法。 一、JSP的中存在的多线程问题: 当客户端第一次请求某一个JSP文件时,服务端把该JSP编译成...

经验教程

85

收藏

25
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部