ZYDSoft NetBox 2.7 使用手册

使用 asp 建立安全的用户识别系统

有一定经验的开发人员一般都实现过一个用户系统,无论是网站社区、聊天室,还是办公系统、管理系统,都必须支持一个用户识别系统,以区别不同的用户,达到个性服务和权限系统的目的。

一般来说,这样的用户系统往往是一个数据库,里面包含了所有的用户,每个用户分别保存了用户名和口令,在用户登录时将其口令和指定用户的口令比较,进行用户识别。

然而这样的用户识别系统却存在着很大的安全隐患。

首先是系统管理员的信任问题,因为所有的用户和口令对于系统管理员来说都是公开的,所以管理员可以直接得到任何用户的口令,一旦管理员的信用出现问题,则整个系统的信用机制便立刻崩溃。

其次是攻击问题,由于口令以明码形式存放在数据库中,数据库的数据泄露将直接导致口令的失窃,同样也直接导致信用的崩溃。

同时,因为大多数人会在不同的系统上使用同样的口令(虽然很不安全,但是事实存在),所以一个系统的口令失窃将导致连锁失窃反应。

基于这些原因,商用系统的用户识别系统就必须支持单向的口令加密系统,以防止类似事件的发生。按照安全的识别系统的需求,我们需要在数据库中存放不可逆向解密的用户口令,而在需要的时候,我们又必须能够识别用户口令是否匹配,报文摘要算法就是一种典型的实现方法。

NetBox 支持大量报文摘要算法,包括 MD2,MD4,MD5,MDC2,RipeMD160,SHA,SHA-1,SHA-2 等,在使用时可以根据安全级别要求的不同选用不同的算法来建立用户识别系统。下面以 MD5 为例演示安全的用户识别系统的实现。

在接受到用户输入的口令后,先将口令使用 MD5 进行单向加密,然后才能更新到数据库中或者与数据库中的口令进行比较,由于 MD5 返回的是二进制数据,所以需要使用 NetBox.Encoding 的 HexEncode 方法转换成为可见字符,下面就是这段代码:

Set MD5 = CreateObject("NetBox.Hash")
MD5.Create
MD5Pass = NetBox.Encoding.HexEncode(MD5.Final(password))
Set MD5 = NoThing

经过上面的运算,MD5Pass 中存放的就是以 16 进制方式编码的 password 的 MD5 运算值。由于报文摘要算法的特性,同样的 password 总是能得到同样的 MD5Pass,而通过 MD5Pass 是无法运算得出 password 的。


版权所有: 2003-2004 网络盒子