随着互联网的高速发展,数据库的应用越来越广泛,为防止数据库被非法浏览、修改、破坏,有必要对数据库中存储的重要数据进行加密处理,以实现数据存储的安全。下面我们就以VFP数据环境为例,给大家讲讲VFP库的术。

按照数据库的结构层次,VFP数据库系统中常用的加密方法依照加密粒度的不同可分为记录级(字段级)、表级和数据项级。

一、记录级(行级)或字段级(列级)加密

如果以记录为单位进行加密, 那么每读写一条记录只需进行一次加解密的操作, 对于不需要访问到的记录,不作进行任何操作。基于记录的加密技术是最常用的数据库加密手段。这种方案的基本思路是:在各自密钥的作用下,将数据库的每一个记录加密成密文并存放于数据库文件中;记录的查找是通过需查找的值加密成密文后进行的,由于密文数据一般不能代替明文进行算术运算和关系运算, 因此采用此方案时, 数据库不能实现索引,连接,排序等多种操作, 并会影响数据库管理系统某些原有功能的作用。

以字段为单位的加密分析与以记录为单位的加密情况相似,字段级加密的数据以伪码方式存放在字段中,可以采用多随机数加密的方法,对于原码的每字符的ASCII值,都产生一个随机数(即密钥)与之运算,生成另外一个0-255之间的数,然后再将它们以3个字符方式与密钥合并成4个字符生成伪码,最后将全部字符生成的这样的伪码联结起来形成对应的密数字序列。当打开表的时候,用加密函数将原码转换成伪码进行保存,从表中无法直接看到原码,只有程序才能动态看到原码,保密性很强。解密时则采用相反的方法,每个字符都要与这个字符有关的随机数运算,由于需用到多个随机密钥,安全系数有较大提高,以下是加密函数:

Function encrypt()

para bb

use pass

appe blan

R=int(rand(-10)*1000)

L=len(bb)

abc=right(str(R)+iif(L>9,str(L,2),"0"+str(L,1)),4)

R=int(rand()*10)

for i=1 to len(bb)

k=asc(subs(bb,i,1))-R

kk=iif(k>99,str(k,3),"0"+str(k,2))

abc=abc+str(R,1)+kk

R=int(rand()*10)

endfor

repl aa with abc

return abc

二、表级加密

(1)用随机伪码的方法实现对数据表的加密

加密函数的思想是对用户密码(真码)进行复杂化、隐蔽化处理,也就是将真码隐藏在多位伪码中,特点是实现简单,加密可靠,不易破解。可将一个1至7位的用户密码转换为20位的随机伪码,且每次重新设定密码时所产生的伪码都不相同,通过变换生成的20位伪码没有任何规律性,即使从数据表中擦除伪码也无法进入系统,从而实现了可靠的密码权限控制。加密函数部分内容如下:

Para ma

N1=rand()*10^9

if N1<=999999999

N1=N1+10^9

endif

N1=int(N1)

Cl=str(N1+ma)+str(N1)

C2=subs(C1,5,20)+subs(C1,l,4)

Pl=””

P2=””

For i=1 TO 10

P1=P1+subs(C2,2*i-l,1)

P2=P2+subs(CZ,2*i,1)

Endfor

Wma=p1+p2

Retu wma

若真码为: abcdef,则伪码为: 14313143139318393183,无论真是一位还是相同多位,伪码总是具有同样的不确定性和复杂性,所以若想通过简化真码来分析伪码是不可能的。

(2)用VFP提供的低级文件函数实现对数据表的加密

该方法的实现原理为:先用低级文件函数自定义一个文件头,其中可包含:文件头长度、字段名、字段类型、字段长度、每条记录长度、密钥等,接着将记录按文件头规定的格式加密后利用低级文件函数fwrite()顺序写入文件中。使用时,用低级文件函数fread()从自定义的文件中读取文件头的内容,用CreateCurso - SQL到新建的数据表中,读取记录后先解密,再用Insert - SQL到刚建的数据表中,然后就可正常使用了。

三、数据项级(字段值级)加密

由于数据元素是数据库内加密的最小单位,每个被加密的元素产生一个相应的密钥,加密的对象是记录中的某个字段值,它是数据库加密的最小单位。其优点是具有较高的安全性,较好的灵活性和适应性。缺点是加/解密效率低,如果各个数据项分别用不同的密钥加密,则密钥个数=记录个数×字段个数,其数量巨大,管理困难。如要对字段mpassword M(4)进行加密(类型设置成备注型或字符型),假设密码长度规定为8, 内容为abcdefgh,编写程序如下:

lpassw='abcdefgh'

lpasswlen=8

mpassw=''

for ln=1 to lpasswlen

mpassw=mpassw+chr(abs(100-asc(subs(lpassw,ln,1))))

endfor

?mpassw

VFP数据库加密技术的应用极大地解决了VFP中数据的安全问题, 在应用中应根据不同的要求,选择合适的加密方法。

小知识之VFP数据库:

VFP是Microsoft公司推出的最新可视化数据库管理系统平台,是功能特别强大的32位数据库管理系统。它提供了功能完备的工具、极其友邓的用户界面、简单的数据存取方式、独一无二的跨平台技术,交肯有良好的兼容性、真正的可编译性和较强的安全性,是目前最快的捷、最实用的数据库管理系统软件之一。