WD。这样 就实现了每天有不同的密码。保密性加强了。 以上几种加密方法都是传统的简单的加密方法, 其特点是简单、 保密性差, 密码单一, 保护能力较低, 主要用于 Dbase、 FOXBASE、 FOXBASE +、FOXPRO2.x 中,由于上述软件的编译不是真正的编译,其密码容易被发现。 三、一种新型密码加密方法 以上介绍的是几种固定的密码加密方法, 下面介绍一下可变密码。“ 可变密码” 指其密码值可由设置自行改变,这种方法一般由文 件保存密码,且密码经过加密运算。密码的加密算运算方法很多,常用的有:转换法、位移法、时间法、随机法等。转换法,就是 把输入的密码经过转换计算,转换成保存密码,取密码时,再经过逆运算,把密码还原。 不定时密码也时可变密码的一种,是指密码的出现是以随机方式来询问用户。如:用户在执行两个功能后必须输入密码,下一次 检查密码可能在执行三个功能后检查密码。这种密码较为隐蔽。其方法如下:首先声明一个变量,用来计数,是 1-5 的随机数; 在每一个过程、函数、或命令执行前,累加该变量值;当该变量值等于其随机值时,调用密码
查询程序。 下面具体介绍一种基于 VFP5.0 的密码设定方法。其特点是:具有使用登记功能;每人一个密码,并可随时更换;密码经加密 运算,不易被破解。 基本思路如下:首先建立两个数据库(table),一个用来存放口令及对应的用户( 称为“ 口令库”),另一个存放用户登录使用情 况( 称为“ 登录库”)。在再建立两个窗口(form),一个用来检查口令,另一个用来
修改口令。接下来定义两个过程(procedure), 一个用来给口令加密(“ 加密过程”),另一个用给口令解密(“ 解密过程”)。这个“ 加密过程”,是把密码经加密运算后存入口令库, 而“ 解密过程” 实际上是把输入的密码经加密运算后与口令库内的密码进行比较,并不是解密。为了使密码输入时不被人看见,要 对密码输入的文字框的属性作如下
工作:进入 DATA 属性栏,把 InputMask 属性改为:XXXXXX,进入 LAYOUT 属性栏,把 PassWordChar 的属性改为:“*”,这样,输入的密码就不会被别人发现。( 在 FOXBASE FOXBASE +,FOXPRO2.X 中,常 用设置背景颜色与输入密码字符颜色相同的办法来防止别人看见。) “ 解密过程” 代码如下:
parameter password pas="" n1=asc(substr(name,1,1)) &;&;取的第一个拼音字母,换算成 ASCII 码 n2= asc(substr(name,2,1)) &;&;作为加密的键值 n3= asc(substr(name,3,1)) n=int((n1+n2+n3)/3) for i=1 to len(trim(password))
&;&;使用 BITXOR()函数对密码进行解密 tempchr=bitxor(asc(substr(password,i,1)),n) pas=pas+chr(tempchr) endfor locate for klk.user_id=name &;&;与口令库内的与相对应的口令进行比较 if (klk.key<>pas) and (pass
word<>"hg") result=.f. else result=.t. endif return result BITXOR() 函数是
vfp 特有的函数,它将函数的两个参数转换成二进制数,并且执行“ 与” 操作,返回一个十进制的结果。用 它来进行加密运算, 保密性强。 加上密码键值 n( 取的第一个拼音字母, 经求和, 再取平均值, 再取整运算, 换算成 ASCII 码), 得到每人一个的密码。 该“ 过程” 的定义方法如下:在定义检查密码的窗口(form) 的编辑状态下,用鼠标点菜单 form,选“new method”, 键入“ 过 程” 名。然后双击正在编辑的窗口(form), 然后进入" 过程" 的编辑状态,写入如上代码。加密过程是解密过程的逆运算,代码如 下:
parameter password pas="" for i=1 to len(trim(password)) n1=asc(substr(name,1,1)) n2= asc(substr(name,2,1)) n3= asc(substr(name,3,1)) n=int((n1+n2+n3)/3) tempchr=bitxor(asc(substr(password,i,1)),n) pas=pas+chr(tempchr) endfor repl