对数据库管理软件而言,软件的安全性、数据的保密性是用户较为关注的的问题。采用何种技术来有效防止无关人员浏览数据、非法修改数据等,是设计人员在具体软件设计中应给予关注的问题。那么如何才能保障vfp表单的安全呢?接下来,我就给大家讲一下利用数据文件加密技术来如何设计加密的vfp表单。

一、用户注册表单设计思路

表单运行时,能根据选择的用户名,输入的密码,判定该用户是否为超级用户(即系统管理员)、则可以进行添加用户、修改密码和删除用户等操作。如果不是超级用户,但有较高的权限,则可以自己修改密码,不能修改他人密码,也不能添加和删除用户。对于权限较低的用户,则提示无权添加、修改和删除用户。

二、设计系统用户数据表

为了实现系统各用户都有各自的密码和权限功能,需要在数据库系统中设计一个用于保存系统用户信息的数据表,本文设为operator.dbf表,其包含四个字段:用户名(xm _C(10)),密码(mm C(6)),权限(qx C(1)),超级用户(cjyfL(1)) 。

三、表单设计过程

1、新建表单,添加控件

新建一用户注册表单如图所示,主要控件有:7个标签(Label))、一个组合框(combo1)、四个文本框(Text)、一个选项按钮组(optiongroup1)、五个命令按钮(command)等,并在表单的数据环境中添加数据表(Operator)。

利用数据加密技术如何设计加密的vfp表单

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表单

从上述具体表单设计中我们不难看出,利用数据加密技术不仅可以设计加密表单,而且能确保数据的安全、可靠。防止非法用户进入系统或修改用户密码。我们将这一技术用于具体的数据库软件开发,除设计了上述的用户注册表单外,还用于设计用户登录表单、系统密码等的设计中,收到良好的效果,也得到用户的充分肯定。

小知识之vfp

Visual FoxPro ,是Microsoft公司从Fox公司的FoxBase数据库软件经过数次改良,并且移植到Windows之后,得来的应用程序开发软件,主要用于开发数据管理与运算等方面的软件。VFP是Microsoft公司推出的最新可视化数据库管理系统平台,是功能特别强大的32位数据库管理系统。它提供了功能完备的工具、极其友好的用户界面、简单的数据存取方式、独一无二的跨平台技术,交肯有良好的兼容性、真正的可编译性和较强的安全性,是目前最快捷、最实用的数据库管理系统软件之一。