admin 管理员组

文章数量: 1086019


2024年5月18日发(作者:java微服务部署方式)

在VB下Access数据库密码的安全设置

摘要:本文从vb程序设计的角度探讨了access数据库

密码的保存方式及密码本身加码、解码的安全问题,以确保

数据的完整性和安全性。

关键词:vb access 密码

0 引言

access 数据库作为微软推出的以标准jet为引擎的桌面

型数据库系统,它界面友好、操作简单,是开发中小型数据

库应用系统的常用平台,以其功能全面、程序设计方便等特

点得到了广泛应用。但是随着access数据库的广泛应用,对

其安全性的需求也越来越高,而数据库的安全主要体现在数

据的安全传送与安全存储,而数据的传送与存储大多数都是

通过对数据本身的加密来实现的;所以,加密和解密问题也

就成为access数据库安全的首要问题。

1 access密码的安全隐患

1.1 access 数据库的存储隐患 access 数据库的安全隐

患第一就是密码的保存问题,将密码放在程序中和文件中,

如果获得或者猜到access据库的存储路径和数据库名,则该

数据库就可以被下载到本地[1]。例如:对于校园网上的一个

图书查询的access数据库,人们一般命名为、library

而存储的路径一般为 “url/database”或干脆放在根目录

(“url/”)下。这样,只要在浏览器地址栏中敲入地址:

“url/database/”,就可以轻易地把下载

到本地的机器中。

1.2 access 数据库的解密隐患 access数据库的加密机

制非常简单,所以即使数据库设置了密码,解密也很容易. 该

数据库系统通过将用户输入的密码与某一固定密钥进行“异

或”来形成一个加密串,并将其存储在*.mdb 文件中从地址

“&h42”开始的区域内. 由于异或操作的特点是“经过两次异

或就恢复原值”,因此,用这一密钥与*.mdb文件中的加密串

进行第二次异或操作,就可以轻松地得到access数据库的密

码.基于这种原理,可以很容易地编制出解密程序[2]。由此可

见,无论是否设置了数据库密码,只要数据库被下载,其信

息就没有任何安全性可言了。

2 在vb中提高access 数据库安全性的方法

在vb中,通过编程来解决数据库中密码的安全问题,

通过vb中的api函数来将密码保存到注册表中,以实现用户

合法性检验的方法;同时对密码进行加密和解密。

2.1 利用api函数在注册表中进行密码操作 从以上分

析密码存储的隐患来看,密码保存在程序和文件中,安全性

能较差;如果考虑将密码存入注册表中,通过对注册表的操

作,可以将密码随便放到注册表的什么地方;要想找到密码

字符可谓大海捞针。

vb为用户提供了4个用于注册表操作的函数savesettin、

etsettin、etallsettins和deletesetin,使用这四个函数可以方

便地操作注册表。通过函数etstrin()将注册表项的值赋值给

字符变量m,窗体装入程序段中的m=

etsettin(hkey_current_user,”redataaa”,””)语句。当用户输入

密码后进行核对,如果输入的密码与m中相同则为合法用户,

登录成功。当窗体装入时调用etstrin函数,在etstrin函数中

调用api函数reopenkey打开指定表项,打开指定表项后,

调入函数requerystrinvalue,在requerystrinvalue函数中首先

调用api函数requeryvalueex hkey,以得到项值空间的大小;

调用vb的strin函数将变量ldatabufsize按其大小设为chr$(0);

对所得键值去掉右侧空字符并将结果赋值给函数名为

requerystrinvalue,程序返回到它的调用之处,etstrin函数操

作完毕将键值赋给变量m,即可等到保存在注册表中的密码

[3]。主要程序如下:

function etstrin(hkey as lon, strpath as strin, strvalue as

strin)

dim ret

reopenkey hkey, strpath, ret

etstrin = requerystrinvalue(ret, strvalue)

reclosekey ret

end function

function requerystrinvalue(byval hkey as lon, byval

strvaluename as strin) as strin

dim strstrin as strin

requeryvalueex hkey, strvaluename, 0, lvaluetype, byval 0,

ldatabufsize

strbuf = strin(ldatabufsize, chr$(0))

requeryvalueex hkey, strvaluename, 0, 0, byval strbuf,

ldatabufsize

requerystrinvalue = left$(strbuf, instr(1, strbuf, chr$(0))

1)

exit function

2.2 在vb中对密码进行加密和解密 当然,为了保证密

码的安全,除了考虑密码的存放方式外,另一方面就是对密

码本身加密,得到一个加密的密码,将密码加密后存放起来

就更安全了。对密码加密实际是将作为密码的字符从一种表

现形式变为另一种表现形式的过程。其中一种方法是设置一

个被称为“密钥”的字符或字符串,通过使用密钥对密码进行

操作,将明码变成密码。在解密时再使用密钥对密码进行逆

操作,密码就还原了。程序使用当前输入的密码作为密钥对

输入的密码作加密操作,将加密后的密码存入文本文件

。程序中使用ciphe过程和numericpassword函

数对密码进行加密操作,其中cipher密钥。当然,密码加密

后在使用时就要对它进行解密,它们的主要程序如下:

private function numericpassword(byval password as

strin) as lon

dim value as lon,ch as lon, shift1 as lon,shift2 as lon

dim i as inteer, str_len as inteer

str_len = len(password)

for i = 1 to str_len

ch = asc(mid$(password, i, 1))

value = value xor (ch * 2 ^ shift1)

value = value xor (ch * 2 ^ shift2)

shift1 = (shift1 + 7) mod 19

shift2 = (shift2 + 13) mod 23

next i

numericpassword = value

end function

3 结束语

通过对access数据库密码安全隐患进行分析,对密码

的保存方式和密码本身的加密,防止数据库被下载和密码破

解起到了一定的作用,道高一尺,魔高一丈,尽管人们想到种

种办法来维护数据库安全,但是也总是不断发现漏洞。所以,

为确保数据库的的安全,数据定期备份与恢复是必不可少的。


本文标签: 密码 数据库 加密 函数 操作