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

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

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

【 tulaoshi.com - 编程语言 】

  一、 原理

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

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

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

  二、 用户登录措施

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

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

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

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

  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。

  三、 数据传送

  在网络程序中,一些敏感数据在网上传送时必须加密。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事件中加入一些处理代码便可对客户端送来的数据进行解密。

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

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

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

延伸阅读
标签: 婴儿
1岁内宝宝有哪些亲子游戏?     父母可以陪着宝宝玩游戏可以说是最好最有效的亲子相处模式,也是宝宝乐于见tulaoshi.com到乐于参与的相处方式。那么,一岁以内的宝宝都有哪些合适的亲子游戏呢?随图老师小编一起来了解下吧。       3-4个月游戏:听歌曲做动作   &nbs...
孕期旅行须注意的事宜 怀孕中期,孕妇在行动上,不似初期必须有所顾忌。濒临生产时刻,大部分时间都待在家里不敢动,难得有这个既稳定又空暇的时间。倒不如在这时做一下短程旅行,让生活充满闲情逸致,对胎儿而言,亦不失是一个不错的胎教方法。 1.旅行准备 在旅行之前,先做好旅行计划,不要让准妈妈及胎儿太劳累,避开人多、嘈杂的地...
又到六一!你的宝宝快乐吗? 在采访中,华东师范大学学前教育系的周念丽老师提到这样一件事:去年某电视台全程跟踪某几个家庭的六一活动——大型航模比赛。活动结束后,记者问及宝宝高兴不高兴,结果宝宝竟然说到:“不高兴!”因为他想要一个小风轮,可以自己操控,却被爸妈拒绝。 六一这个每年都有的节日,究竟怎样来过才能让宝宝真正地快乐...
本程序通过调用kernel32.dll中的几个API 函数,搜索并列出系统中除本进程外的所有进程的ID、对应的文件说明符、优先级、CPU占有率、线程数、相关进程信息等有关信息,并可中止所选进程。 本程序运行时会在系统托盘区加入图标,不会出现在按Ctrl+Alt+Del出现的任务列表中,也不会在任务栏上显示任务按钮,在不活动或最小化时会自动隐...
标签: Java JAVA基础
  作者:徐春金 JSP默认是以多线程方式执行的,这是JSP与ASP,PHP,PERL等脚本语言不一样的地方,也是它的优势之一,但如果不注意多线程中的同步问题,会使所写的JSP程序有难以发现的错误。下面以一个例子说明JSP中的多线程问题及解决方法。 一、JSP的中存在的多线程问题: 当客户端第一次请求某一个JSP文件时,服务端把该JSP编译成...

经验教程

401

收藏

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