4.5写用户名和密码的应用与编码 在初始化完成后,就需要向锁里面写入信息了,写信息是写入用户名。用户名也被记录到KEY里面,成功向Rockey2加密锁写入信息后,就可以对文件进行加密和解密的操作了。用户名写入后就不可更改,所以写入用户名的时候必须确认你要正确的写入用户名。 http://www.paper51.com 需要设计一个提示输入信息的窗口。在页面的左上角插入一个图片,在设计面板上添加3个Label,并在里面写入需要的内容;在设计一个编辑框Edit,在编辑框里用户可以输入姓名。姓名的Length(S)不能大于32,超过这个范围,不能写入用户名。 copyright paper51.com if Length(S) > 32 thenbegin copyright paper51.com MessageBox(0, '您输入的姓名大于32个字符,请重新输入!', '姓名过长!', MB_ICONWARNING or MB_OK); 内容来自论文无忧网 www.paper51.com exit; http://www.paper51.com 用户名里面的值不允许为空。 内容来自www.paper51.com copyright paper51.com 图4-2 输入姓名窗口 http://www.paper51.com 成功的写入自己的姓名---康桃义后,那么名字就储存到Rockey2加密锁里面了。而且名字不能更改。 http://www.paper51.com 在CONST中自定义信息,对NC赋值,以后在使用过程中直接调用NC。不在需要对其定义。 内容来自www.paper51.com const paper51.com NC='您输入的姓名是:%s'+#13+#10+'注意!一旦确认后,你将不能修改'; paper51.com
paper51.com 图4-3姓名确认窗口 内容来自www.paper51.com
点击确定后显示确认窗口。 copyright paper51.com MessageBox(0, PChar(format(NC,[S])), '确认', MB_ICONWARNING orMB_YESNO)=IDYES 内容来自www.paper51.com 写密码和写用户名也很重要,在以后的使用过程中就直接读取里面的信息,不需要在向KEY里面写入信息。 http://www.paper51.com 写密码的过程中,定义函数WritePass( ),写密码前,还需要对KEY定义一个区段,不然密码写进去后会不知道存放在什么地方;自定义把密码存放在33-64这个存储区域内。然后直接把密码Write进去。 内容来自www.paper51.com //部分代码为: http://www.paper51.com if (not ReadSection(0, Str)) then exit; 内容来自www.paper51.com if not OpenKey then exit; 内容来自论文无忧网 www.paper51.com MD5Str :=MD5DigestToStr(MD5String(Pass)); http://www.paper51.com Str := StuffString(Str, 33, 32, Pass); copyright paper51.com Str := StuffString(Str, 65, 32, Md5Str); copyright paper51.com Retcode := RY2_Write(HKey, 0, PChar(Str)); copyright paper51.com if retcode < 0 then copyright paper51.com begin paper51.com CloseKey; 内容来自www.paper51.com exit; 内容来自www.paper51.com end; 内容来自论文无忧网 www.paper51.com 写用户名与写密码的过程,因为只给了用户名32个字节的存储空间,如果大于这个存储空间,就只取前32个字节储存。这里需要用到Trim( )函数,它主要是用来去掉字符串头和尾的空格。 http://www.paper51.com
//部分代码为: http://www.paper51.com if Length(OS) > 32 then OS :=Copy(OS, 1, 32) else OS := O; paper51.com OS:= Trim(OS); http://www.paper51.com N:=32-Length(OS); copyright paper51.com for I:=1 to N do begin 内容来自论文无忧网 www.paper51.com OS:=OS+#32; paper51.com end; 内容来自www.paper51.com Str := StuffString(Str, 97, Length(OS),OS); paper51.com Retcode := RY2_Write(HKey, 0, PChar(Str)); paper51.com 4.6文件加密应用与编码 paper51.com 在本设计中,加密解密的操作过程需要用到shell控件和FLEX控件,这两个都是DPK文件的控件包。由于Delphi 7.0默认情况下没有安装此控件,因此需要手动添加。首先需要添加该控件的路径,在tools-environment options-library path中加进该文件的路径。然后在Delphi中File-->Open(下拉列表框中选*.dpk)-->install即可。此设计中要用到shell的扩展,shell的扩展是指能够添加某种功能到windows shell的com对象。 paper51.com 由于空间已经安装成功,那么在delphi中建立一个shell module,在上面放置contextmenu控件、flex控件、popupmenu控件和image。Contextmenu主要使用在当用户右键单击文件或文件夹对象时,或在一个文件夹窗口中的背景处单击右键时被调用。把Contextmenu指向popupmenu。双击popupmenu后在里面添加‘加密-文件’和‘解密文件’。 让popupmenu中的事件指向imagelist。在imagelist中添加所需要的图标。Felx控件在事件中需要于progress进度框关联起来。 内容来自论文无忧网 www.paper51.com 在实现文件加密的过程中,要对KEY作一个判断,看KEY是否连接在计算机上或则是使用的KEY是否正确。利用MessageBox()弹出此窗口提示错误信息。这样表明KEY不可用。 copyright paper51.com
copyright paper51.com
图4-4 初试化错误窗口 内容来自www.paper51.com //其部分代码为: http://www.paper51.com begin 内容来自www.paper51.com if (not ReadPass(Pass, HID, FileOwner)) then begin copyright paper51.com
MessageBox(0, '系统无法找到你的 USB钥匙!' + #13 + #10 + '请你检查USB钥匙后再试。', 'USB 钥匙初始化错误!', MB_ICONWARNING or MB_OK); copyright paper51.com
exit; paper51.com end; 内容来自www.paper51.com
在文件的加密过程中,需要对文件进行预处理,因为要加密的文件可能是一个文件或则多个文件;还可以是一个目录或者多个目录,利用USB KEY文件加密它不能对目录进行加密,只能对文件进行加密。如果得到是一个目录文件GetFolderFiles,那么寻找文件的路径,CPath:= Path + '\';。找到符合条件的文件,然后把这些符合条件的文件添加到列表。然后在加密过程中对这些文件进行递归查找。 copyright paper51.com //其部分代码为: paper51.com //添加符合条件的文件到列表 内容来自www.paper51.com if ((SearchRec.Attr and faDirectory) = 0) then begin paper51.com AllFiles.Add(SPath); 内容来自论文无忧网 www.paper51.com PForm.StatusBar.Panels[1].Text := IntToStr(AllFiles.Count) + '-个文件'; 内容来自论文无忧网 www.paper51.com
Application.ProcessMessages; 内容来自www.paper51.com end; 内容来自论文无忧网 www.paper51.com
//递归查找 内容来自www.paper51.com if (DirectoryExists(SPath) and (SearchRec.Name <> '.') and(SearchRec.Name <> '..')) http://www.paper51.com thenGetFolderFiles(SPath); http://www.paper51.com end; http://www.paper51.com
|