3 copyright paper51.com .2数据库设计 内容来自www.paper51.com
3 内容来自论文无忧网 www.paper51.com
.2. paper51.com 1 内容来自www.paper51.com 数据库需求分析 http://www.paper51.com
作为一个具有一定应用价值的管理系统,从本质上说其操作的对象为数据库中存储的具体记录。因此,不仅需要所使用的数据库系统具有比较高的稳定性、安全性下保持足够响应的能力,还要求设计者清楚需求,做出合理的数据库逻辑结构设计,以提高数据库的利用效率和减少数据冗余。 内容来自www.paper51.com 以这种思想作为设计策略,分析出系统的以下几项需求: http://www.paper51.com (1)管理员可以实现对用户的分类 http://www.paper51.com
(2)管理员可以实现对用户信息的添加,编辑和查看。 copyright paper51.com (3)管理员可以初始化用户拥有的Rockey2 内容来自www.paper51.com 3 http://www.paper51.com .2. 内容来自www.paper51.com 2 内容来自www.paper51.com 数据库实体关系设计 内容来自论文无忧网 www.paper51.com 通过以上的需求分析,设计出数据库的逻辑结构——E-R图,从这种逻辑结构有可以建立数据库的物理结构即表结构。根据需求设计出三个数据表,分别是:客户信息表(clients),key表(keys),分类表(groups)其结构及关系如图1所示。 内容来自www.paper51.com
http://www.paper51.com
图4客户与KEY关系图 内容来自www.paper51.com 图3客户与客户分类关系图 paper51.com 客户分类 内容来自www.paper51.com 客 户 copyright paper51.com
3 http://www.paper51.com
.2. 内容来自论文无忧网 www.paper51.com
3 内容来自www.paper51.com 数据库逻辑设计 内容来自论文无忧网 www.paper51.com 确定了数据库的逻辑关系和数据结构之后,进一步将以上所述的四个数据表由概念结构转化为数据库系统所支持的实际数据模型,也就是数据库的逻辑结构。 http://www.paper51.com
表3所示为客户信息表(clients),记录了管理员所管理的客户的相关信息。 http://www.paper51.com 表3 clients 内容来自论文无忧网 www.paper51.com 列名 copyright paper51.com 数据类型 copyright paper51.com 长度 内容来自www.paper51.com
CGID(PK) 内容来自论文无忧网 www.paper51.com INTEGER 内容来自论文无忧网 www.paper51.com 4 http://www.paper51.com CName 内容来自www.paper51.com
STRING copyright paper51.com 50 copyright paper51.com CAddress 内容来自www.paper51.com STRING http://www.paper51.com 50 内容来自www.paper51.com CContact 内容来自论文无忧网 www.paper51.com
STRING 内容来自www.paper51.com 20 paper51.com CPhone http://www.paper51.com STRING http://www.paper51.com
100 内容来自论文无忧网 www.paper51.com CMobile paper51.com STRING 内容来自论文无忧网 www.paper51.com 40 http://www.paper51.com CFax 内容来自论文无忧网 www.paper51.com STRING copyright paper51.com
40 内容来自www.paper51.com CWeb copyright paper51.com STRING http://www.paper51.com
25 copyright paper51.com
CEmail copyright paper51.com STRING paper51.com 40 copyright paper51.com 表4所示为分类表(groups),记录管理员按照什么方式进行分类。 http://www.paper51.com 表4 groups 内容来自论文无忧网 www.paper51.com 列名 paper51.com
数据类型 paper51.com 长度 http://www.paper51.com
GID(PK) 内容来自论文无忧网 www.paper51.com AUTOINC paper51.com 4 内容来自论文无忧网 www.paper51.com GPID http://www.paper51.com STRING http://www.paper51.com 20 内容来自论文无忧网 www.paper51.com GName copyright paper51.com STRING http://www.paper51.com 40 http://www.paper51.com 表5所示为keys表,记录了客户所拥有的所有Rockey2的信息,包括对文件加密解密的密码以及硬件ID号。 内容来自www.paper51.com 表5 keys copyright paper51.com
列名 copyright paper51.com
数据类型 内容来自论文无忧网 www.paper51.com 长度 copyright paper51.com
KID(PK) paper51.com AUTOINC copyright paper51.com 4 paper51.com KCID copyright paper51.com STRING paper51.com 20 copyright paper51.com
KHID 内容来自论文无忧网 www.paper51.com STRING 内容来自www.paper51.com 40 内容来自www.paper51.com
KPass 内容来自www.paper51.com STRING 内容来自www.paper51.com 32 内容来自论文无忧网 www.paper51.com
KOther paper51.com STRING 内容来自www.paper51.com
20 http://www.paper51.com 4应用以及编码 http://www.paper51.com 4.1初始化以及写密码的过程的应用与编码 copyright paper51.com 初始化是本设计的一个重要过程。通过加密锁的内存分配可以知道,加密锁里面存储有4个数据:NULL(辨别是否初始化);SN(密码);MD5(密码的MD5值);UN(用户名)。一把新的加密锁里面的数据都是空的,必须向里面写入数据才可以使用。 copyright paper51.com 首先定义一个种子,种子的长度不能超过64个字节。它由数字和字母组成。SecureStr=f6a24cac3922c691ad2ce13b64d83c546f994f11e14ada832dd1b9e167e64464,定义种子之后,就可生成UID = '1921722780'。这个UID是唯一的,也就是说以后所有初始化的USB key都有相同的UID。 内容来自www.paper51.com
在随机产生密码的过程中,定义一个函数GenPass(),并且把密码的范围限制在32个字节以内。然后需要随机生成密码,在随机生成密码的过程中调用Random(93)函数。目的是让它产生一个从1到92之间的随机数。但是ASC表中的32为空,所以就取32之后的值。 内容来自论文无忧网 www.paper51.com //具体实现代码为: paper51.com begin 内容来自论文无忧网 www.paper51.com Randomize; http://www.paper51.com for I := 1 to 32 do begin http://www.paper51.com Pass := Pass +Char(Random(93) + 33); 内容来自www.paper51.com
end; http://www.paper51.com Result := Pass; 内容来自www.paper51.com end; 内容来自www.paper51.com 随机密码产生后,在初始化过程中就利用种子生成UID。在此过程中定义函数InitRockey(ESeed: string; var UID: Cardinal; ReadOnly: boolean),对KEY进行初始化。然后利用该UID产生密码,产生密码后就直接写入KEY里面。 paper51.com //其关键代码为: http://www.paper51.com
Str := ESeed; 内容来自论文无忧网 www.paper51.com If ReadOnly paper51.com then Retcode:=RY2_GenUID(Handle,GUID,PChar(Str),ROCKEY2_ENABLE_WRITE_PROTECT) 内容来自论文无忧网 www.paper51.com
else Retcode:=RY2_GenUID(Handle,GUID,PChar(Str),ROCKEY2_DISABLE_WRITE_PROTECT); http://www.paper51.com ………………省略………………… 内容来自www.paper51.com UID := GUID; 内容来自论文无忧网 www.paper51.com 产生的GUID的值就是UID的值。最后在对锁进行初始化时,需要锁给出一个询问信息。InitRockyQuery(),询问是否对锁进行初始化。 paper51.com MessageDlg('初始化 Rockey?',mtConfirmation, [mbYes, mbNo], 0) = 6。 http://www.paper51.com
Confirmation在这里使用是在询问框中显示YES或则NO这两个确认按钮。 copyright paper51.com 写密码的过程中,定义函数WritePass( ),写密码前,还需要对KEY定义一个区段,不然密码写进去后会不知道存放在什么地方;自定义把密码存放在33-64这个存储区域内。然后直接把密码Write进去。 http://www.paper51.com //部分代码为: copyright paper51.com if (not ReadSection(0, Str)) then exit; http://www.paper51.com
if not OpenKey then exit; 内容来自论文无忧网 www.paper51.com
MD5Str :=MD5DigestToStr(MD5String(Pass)); 内容来自www.paper51.com Str := StuffString(Str, 33, 32, Pass); paper51.com Str := StuffString(Str, 65, 32, Md5Str); paper51.com Retcode := RY2_Write(HKey, 0, PChar(Str)); http://www.paper51.com
if retcode < 0 then copyright paper51.com begin paper51.com CloseKey; copyright paper51.com exit; 内容来自www.paper51.com end; paper51.com 在这里需要说明一下加密锁是如何来识别是用该加密锁来加密的文件。可以用来作为识别的有三个元素,包括加密锁的硬件ID,对文件加密的密码,再就是对文件加密的密码的MD5值。下面我们来比较一下这三个元素哪个更加适合:首先用加密锁的硬件ID,这种方法的不足就是每一把硬件ID的值的是不同的,如果加密锁遗失,将不能打开文件。其次用对文件加密的密码,这种方法的不足就是密码是明文,不适合用来识别。最后一种就是用对文件加密的密码的MD5值,由于MD5算法是现在一种相对比较安全的一种加密算法,很难被破解。因此我们采用了最后一种方法来识别它们。 内容来自论文无忧网 www.paper51.com 4.2管理界面的设计 内容来自www.paper51.com 4.2.1管理主界面设计 paper51.com
内容来自www.paper51.com 图5锁管理界面 内容来自论文无忧网 www.paper51.com 4.2. http://www.paper51.com 2 copyright paper51.com
分类管理模块的设计 内容来自www.paper51.com 内容来自www.paper51.com 图6添加客户界面 copyright paper51.com 管理员可以按照不同的分类方式进行分类,便于对客户的管理。 http://www.paper51.com 具体代码如下: paper51.com
procedure TfMain.NewGroupExecute(Sender:TObject); paper51.com
var 内容来自www.paper51.com SNode: TTreeNode; 内容来自论文无忧网 www.paper51.com PID: integer; copyright paper51.com
begin 内容来自论文无忧网 www.paper51.com SNode := GroupsTree.Selected; 内容来自www.paper51.com if Assigned(SNode) then begin http://www.paper51.com PID :=UnitDM.RockyDM.TGroups.FieldByName('GPID').AsInteger; http://www.paper51.com UnitDM.RockyDM.TGroups.Append; copyright paper51.com
UnitDM.RockyDM.TGroups.FieldByName('GPID').AsInteger:= PID; http://www.paper51.com UnitDM.RockyDM.TGroups.FieldByName('GName').AsString := '新分类'; paper51.com UnitDM.RockyDM.TGroups.Post; copyright paper51.com end; paper51.com
end; paper51.com |