对数据库管理软件而言,软件的安全性、数据的保密性是用户较为关注的的问题。采用何种技术来有效防止无关人员浏览数据、非法修改数据等,是设计人员在具体软件设计中应给予关注的问题。那么如何才能保障vfp表单的安全呢?接下来,我就给大家讲一下利用数据文件加密技术来如何设计加密的vfp表单。
一、用户注册表单设计思路
表单运行时,能根据选择的用户名,输入的密码,判定该用户是否为超级用户(即系统管理员)、则可以进行添加用户、修改密码和删除用户等操作。如果不是超级用户,但有较高的权限,则可以自己修改密码,不能修改他人密码,也不能添加和删除用户。对于权限较低的用户,则提示无权添加、修改和删除用户。
二、设计系统用户数据表
为了实现系统各用户都有各自的密码和权限功能,需要在数据库系统中设计一个用于保存系统用户信息的数据表,本文设为operator.dbf表,其包含四个字段:用户名(xm _C(10)),密码(mm C(6)),权限(qx C(1)),超级用户(cjyfL(1)) 。
三、表单设计过程
1、新建表单,添加控件
新建一用户注册表单如图所示,主要控件有:7个标签(Label))、一个组合框(combo1)、四个文本框(Text)、一个选项按钮组(optiongroup1)、五个命令按钮(command)等,并在表单的数据环境中添加数据表(Operator)。
2、设置控件的有关事件
(1)在表单的Activate事件中添加如下代码:
public czycs,mmzw,yfqxcs,cjyfcs _ &&定义有关变量:
mmzw=0
select operator
if recc()=0
czycs=chr(87+asc(space(1)))+chr(75+asc(space(1)))+chr(54+asc(space(1)))+;
chr(48+asc(space(1)))+chr(82+asc(space(1)))+chr(23+asc(space(1)))
yfqxcs=chr(40+asc(A))
insert into operator values(管理员,czycs,.T.,yfqxcs)
endif
thisform.combo1.value=alltrim(xm) _&&_给控件赋值
设置以上代码的意义:当表单加载时先检查operator表中是否存在用户记录,如果不存在就添加一各用户名为“管理员”、密码”空”、用户权限为“A”、超级用户的记录,并将空密码及用户权限“A”加密后插入到operator表中,来作为初始系统用户密码,以便系统管理员能通过该表单进行修改和添加用户。
加密方法是:Asc()函数将6个空格和字母“A”转为ASCⅡ码,并加上相应值(如代码中的87、75、54…),再通过Chr()函数转化为字符,最后将各加密的字符连接以完成对用户密码和权限的加密过程。
(2)在表单中新建一加密方法程序(Yfmm):
czycs=chr(87+asc(substr(thisform.text2.value,1,1)));
+chr(75+asc(substr(thisform.text2.value,2,1)));
+chr(54+asc(substr(thisform.text2.value,3,1)));
&&对密码进行加密处理
+chr(48+asc(substr(thisform.text2.value,4,1)));
+chr(82+asc(substr(thisform.text2.value,5,1)));
+chr(23+asc(substr(thisform.text2.value,6,1)))
yfqxcs=chr(40+asc(upper(thisform.text4.value)))
&&对权限权限加密处理
if thisform.optiongroup1.option1.value=1
&&判断是否为超级用户cjyfcs=.T.
&&超级用户?else??cjyfcs=.F.
&&非超级用户
end if
以上代码的含义是:将用户输入到文框(Text2)中的字符串(6个字符,即密码,可以是字母或数字),通过Substr()函数和Asc()函数中的各字符逐一转为ASCⅡ码,并加上相应值,再通过Chr()函数转化为字符,最后将各加密的字符连接以完成对用户密码的加密过程。对用户权限,先通过Upper()函数将用户输入的字符(即:权限,一个英语字母)转化为大写字母,再将其转为ASCⅡ码码,并加上相应值,然后通过Chr()函数转化为字符。
从上述可以看出,加密方法采用的是二次加密技术。它是目前较为流行的一种数据加密技术。能有效防止密码被轻易识别或非法用户破解,从而提高了密码安全性。
(2)确定按钮(Command1)的Click事件中添加如下代码:
do case case this.caption=确定 &&如果Command1标题文本为“确定”
thisform.yfmm &&执行加密方法,对用户输入的密码加密处理 select operator locate for mm=czycs and alltrim(xm)=;
alltrim(thisform.combo1.value) &&在数据表中搜索与输入相同的操作员密码和姓名 if found() &&如果找到
yfqxcs=chr(asc(qx)-40) &&对用户权限解密处理 do case
case cjyf=.T. and yfqxcs=A &&如果为超级用户就将添加、修改、删除按钮激活 this.caption=返回 &&将Command1标题文本改为“返回” thisform.command2.enabled=.T. thisform.command3.enabled=.T.
thisform.command4.enabled=.T. &&激活添加、修改和删除按钮
case yfqxcs=A or yfqxcs=B &&如果为A、B类用户但不是超级用户,则将修改按钮激活
this.caption=返回 &&将Command1标题文本改为“返回”thisform.command3.enabled=.T.otherwise
=messagebox(你的权限不够,无权修改密码或添加用户!,48,密码错误)
endcase else=messagebox(密码输入不正确!请重输!,48,密码错误)
mmzw=mmzw+1&&统计密码输入错误的次数 if mmzw<3 &&如果小于3次,可重输入else=messagebox(对不起,你不是本系统用户你无权修改或添加用户!,48,密码错误)
thisform.release &&退出表单
endif
endif
case this.caption=返回&&如果Command1标题文本为“返回”
this.caption=确定&&将Command1标题文本改为“确定”
thisform.command2.enabled=.f.&&将添加、修改、删除按钮置为失效并修改标题名称
thisform.command3.enabled=.f.thisform.command4.enabled=.f.thisform.command2.caption=添加
thisform.command3.caption=修改
thisform.command4.caption=删除
thisform.text2.visible=.T.
thisform.label3.visible=.T.
endcase
上述代码主要实现的功能为:能根据按钮的标题文本来决定进行何种操作。
如果为“确定”:将标题文本改为“返回”,然后检测输入密码正确与否,如果密码正确就判断是否为“超级用户”和权限为“A”,如果是,就激活添加、修改和删除按钮;如果是“非超级用户”但权限“A”或“B”就激活修改按钮;如果不是上述类型的用户就提示权限不够不能修改、删除和添加密码的操作。如果用户密码输入不正确允许重试三次。
如果为“返回”_将标题文本改为“确定”,然后将表单置为初始状态,以便进行其它操作。
(4) 添加按钮(Command2)的Click事件中添加如下代码:
do case
case this.caption=添加
&&如果Command2标题文本为添加项
this.caption=确认添加
&&将标题文本改为“确定”?
thisform.command3.enabled=.F.&&关闭修改和删除按钮
thisform.command4.enabled=.F.
thisform.label4.caption=请输入用户名
&&改变相应控件名称?
thisform.label5.caption=请输入验证密码
thisform.label6.caption=请输入权限
thisform.text1.passwordchar=&&更改文本框输入方式,使其能输入用户名
case this.caption=确认添加
&&如果Command2标题文本为确认添加项
if empty(thisform.text1.value) or empty(thisform.text4.value)&&判断是否存在空输入
=messagebox(用户名、权限等不能为空!,48,提示) return
endif
if alltrim(thisform.text2.value)=alltrim(thisform.text3.value)&&如果密码和验证密码相同
thisform.yfmm&&执行加密方法程序对新用户密码加密处理
insert into operator values(thisform.text1.value,czycs,cjyfcs,yfqxcs)
&&在库中添加新用户
=messagebox(新用户添加成功!,64,添加新用户)
else
=messagebox(密码错误,设定密码与验证密码不符!,64,密码错误)
end if
end case
上述代码主要实现的功能:能根据按钮的标题文本来决定进行何种操作。
如果为“添加”:将标题文本改为“确认添加”,同时更改用户界面,以提示用户输入用户名、密码和验证密码、权限和是否设为超级用户等。
如果为“确认添加”:判断有关的文本框是否为空,如果不为空且密码和验证密码相同,则执行加密方法程序,对新用户密码进行加密处理,然后将记录添加到operator表中。同时将标题文本改为“添加”,以便可以继续添加新的用户。
(5)修改按钮(Command3)的Click事件添加如下代码:
do case case this.caption=修改
&&如果标题文本为修改 this.caption=确定
thisform.command2.enabled=.F.
&&关闭添加、删除项 thisform.command4.enabled=.F.
thisform.label4.caption=请输入原密码 &&赋各标签名称
thisform.label5.caption=请输入验证密码
thisform.label6.caption=请输入权限
thisform.text1.passwordchar=* &&改为输入密码格式 case this.caption=确定
&&如果标题文本为”修改” czycs=chr(asc(subst(alltrim(mm),1,1))-87)+; chr(asc(subst(alltrim(mm),2,1))-75)+; chr(asc(subst(alltrim(mm),3,1))-54)+; chr(asc(subst(alltrim(mm),4,1))-48)+; &&对库中用户原密码解密 chr(asc(subst(alltrim(mm),5,1))-82)+; chr(asc(subst(alltrim(mm),6,1))-23)
if czycs=alltrim(thisform.text1.value) &&如果输入密码与库密码相符 if thisform.text2.value=thisform.text3.value &&判断新密码与验证密码相符
thisform.yfmm &&如果相同符执行加密码方法对新密码加密处理 replace mm with czycs,cjyf with cjyfcs,;
&&修改库中用户密码和权限 qx with iif(empty(alltrim(thisform.text4.value)),yfqx,yfqxcs)
=messagebox(密码和权限修改成功,下次登录请使用新密码!,64,修改密码)
else =messagebox(新密码和验证密码不符!,48,密码错误) return endif
else
=messagebox(你所输入的原密码不对!+chr(13)+你无权修改别人密码!,48,密码错误) return
end if
end case
上述代码主要实现的功能为:能根据按钮的标题文本来决定进行何种操作。
如果为“修改”:将标题文本改为“确定”,同时更改用户界面,以提示选择用户、输入原密码、新密码、验证密码、权限和是否设为超级用户等。
如果为“确定”:将库中的该用户密码解密(即将库中经过加密的密码还原成原密码。其方法与加密过程类似,只各字符的ASCⅡ减去相应的数值。),然后与用户输入的密码进行比较。如果一样,并且新密码和验证密码相同,则执行加密方法程序,对新密码和权限进行加密处理,然后用其值修改operator中的原密码和权限等。同时将标题文本改为“修改”,以便可以继续修改其它用户。
(6)删除按钮(Command4)的Click事件中添加如下代码:
do case
case this.caption=删除
&&如果为删除项 this.caption=确定
case this.caption=确定 select operator
locate for alltrim(xm)=alltrim(thisform.combo1.value)
&&将记录定位到相关的用户名 ts=messagebox(你确实要删除该用户吗?,4+32+256,删除系统用户)
if ts=6
&&如果按是 delete &&删除该操作员
pack
thisform.combo1.value=alltrim(xm)
end if
this.caption=删除 endcase
上述代码主要实现的功能:能根据按钮的标题文本来决定进行何种操作。
如果为“删除”,将标题文本改为“确定”,同时更改用户界面,以提示选择用户,进行删除操作。如果为“确定”,则将该用户从operator表中删除,同时将标题文本改为“删除”,以便可以继续修改其它用户。
至此,表单设计完毕(当然为了界面的整洁,在设计中还应根据操作的项目,设置相关控件的属性为隐藏或显示,关在表单中添加必要的说明等),使其能有良好的用户界面。运行表单其效果之一如下图所示,首次登录时用户名为管理员,此时密码为空,点击确定即进行添加新用户、修改管理员密码等操作。
四、利用数据加密技术如何设计加密的vfp表单效果_
从上述具体表单设计中我们不难看出,利用数据加密技术不仅可以设计加密表单,而且能确保数据的安全、可靠。防止非法用户进入系统或修改用户密码。我们将这一技术用于具体的数据库软件开发,除设计了上述的用户注册表单外,还用于设计用户登录表单、系统密码等的设计中,收到良好的效果,也得到用户的充分肯定。
小知识之vfp
Visual FoxPro ,是Microsoft公司从Fox公司的FoxBase数据库软件经过数次改良,并且移植到Windows之后,得来的应用程序开发软件,主要用于开发数据管理与运算等方面的软件。VFP是Microsoft公司推出的最新可视化数据库管理系统平台,是功能特别强大的32位数据库管理系统。它提供了功能完备的工具、极其友好的用户界面、简单的数据存取方式、独一无二的跨平台技术,交肯有良好的兼容性、真正的可编译性和较强的安全性,是目前最快捷、最实用的数据库管理系统软件之一。