VFP 中的加密算法
一、前言 在应用软件中,数据库管理软件是应用的最广泛的
软件。数据库管理软件的安全性、保密性是开发、应用人员较为关心的。如何 防止无关人员浏览数据库,如何防止数据库被非法修改、破坏?常用的方法是给数据库、管理程序加上密码。那么,加了密码就安 全了吗?怎样才能使密码安全呢? 二、传统的密码加密方法 从 dBASE 到 dBASEIII ,从 FOXBASE 到 FOXBASE +,从 FOXPRO 到 VISUAL FOXPRO,常用加密码的方法给程序、 数据库加密。常见的密码有以下几种:固定密码,简单加密的固定密码,加密变化的密码,具体分析如下: 1、固定密码 固定密码,就是系统只有一个密码,而且是固定的,不可变的。常见于用 Dbase、FOXBASE、FOXBASE +、FOXPRO2.X 开 发的数据库
管理系统。
常用如下语句:
I=1 DO WHILE .T. PWD=SPACE(8) SET CONS OFF @12,35 SAY " 口令!!!" ACCEPT TO PWD IF TRIM(PWD)<>"123456" IF I >=3 @20,32 SAY "口令错误,您不能使用!" RETURN ENDIF @12,30 SAY "第" +STR(I,1)+"次口令错!" I =I +1 ELSE @20,28 SAY "欢迎使用本系统!" EXIT ENDIF ENDDO 从以上语句不难看出,其核心是:变量 PWD 与输入值的比较。密码“1234” 是程序设计时设定的,以后应用时是无法修改的, 如 果 修 改, 就 要改 变 源程 序。 当 然 ,也 可 以编 写 一段 子程 序 用 来修 改 密码 , 修改 前, 其 判 断旧 密 码是 否 正确 ,也 用 IF TRIM(PWD)<>"123456" 语句。其灵活性很差,在 pctool 等工具出现后,保密性就显得差了。 2、简单加密的固定密码 简单加密的固定密码,是指把密码进行简单的加密,但密码仍然是固定的,不变的。简单加密一般有两种:“ 钥匙盘” 法和“ 变 换法”。“ 钥匙盘” 法,就是把密码存放在一张软盘上,使用时,把“ 钥匙盘” 插入计算机,系统
程序读取软盘中的密码。或把密 码和操作员存到数据库中,此数据库存放于软盘内,使用时把“ 钥匙盘” 插入
计算机,系统读取软盘中的密码和操作员, 下面是此法的主要语句: USE A:KLK &;&;到 KLK 数据库内查找输入的操作员的;
I=1 DO WHILE .T. STORE SAPCE(8) TO XM @ 10,26 SAY "请输入操作员:" GET XM READ LOCATE ALL FOR LTRIM(TRIM(XM))=LTRIM(TRIM(NAME)) IF .NOT. EOF() EXIT &;&;操作员输入正确,向下执行; ENDIF IF I >=3 &;&;操作员输入计数,输入次数超过 3 次,退出系统; (代码同前) … ENDIF ENDDO IF I< 5 &;&;正确后,比较输入口令正确否; MKL =SPACE(8) I=1 DO WHILE I< 3 SET CONS OFF @12,30 SAY " 口令! !" ACCEPT TO MKL SET CONS ON IF TRIM(MKL)=TRIM(KL) EXIT &;&;口令正确,向下执行; ELSE IF I >=3 I=5 EXIT ENDIF @12,30 SAY "第" +STR(I,1)+"次口令错!" I =I +1 ENDIF END
DO ENDIF IF I=5 @20,32 SAY "口令错误,您不能使用!" ELSE @20,32 SAY "欢迎使用!" ENDIF RETURN 这种加密方法保密性要好一些,但每次使用都要用“ 钥匙盘” 进入系统,很繁琐。 变换法,就是通过对密码的运算,使密码发生变化的方法,一般采用换算法,常用的加密语句如下: PSD =CHR(65)+CHR(66)+CHR(67)+"9" 函数 CHR(),是用来换算 ASCII 码的,换算后的 PSD 是 ABC9。用这种简单的换算,可以避免密码被直接发现,如果和上述
方法混合应用,保密性就加强了。
3、简单加密变化的密码 以上密码都是固定的,下面介绍一种经简单加密变换的密码。这是利用时间函数来加密的算法,密码每天都不同。密码由变化的 时间和固定字符构成。其核心语句为:
kl=DATE() PWD= SUBSTR(CDOW(kl),1,3)+"1234" CDOW() 函数, 输入年月日, 返回星期几 (字符型) 操作者根据今天是星期几, 。 将星期的前 3 个英文字母和固定的“1234” 输 入,与变量 PWD 比较。程序会把今天的日期换算成星期数,然后取前 3 位,并加上“1234”,合成今天的密码变量 P