L2002214042_康桃义_基于USB KEY的文件加密工具—-客户端的实现_第1页
L2002214042_康桃义_基于USB KEY的文件加密工具—-客户端的实现_第2页
L2002214042_康桃义_基于USB KEY的文件加密工具—-客户端的实现_第3页
L2002214042_康桃义_基于USB KEY的文件加密工具—-客户端的实现_第4页
L2002214042_康桃义_基于USB KEY的文件加密工具—-客户端的实现_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

分类号:TP315 U D C:D10621-408-(2007)5745-0密 级:公 开 编 号:2002214042成都信息工程学院学位论文基于USB KEY的文件加密工具-客户端的实现论文作者姓名:康桃义申请学位专业:计算机科学与技术申请学位类别:工学学士指导教师姓名(职称):高宏宇(讲师)论文提交日期:2007年 6 月 4 日基于USB KEY的文件加密工具-客户端的实现摘 要随着计算机不断的发展,文件的安全性受大越来越大的重视,为了对自己需要保密的文件进行加密,防止别人窃取和不被别人识别,提高文件的安全强度,文件加密已成为一个重要的话题。本设计为了解决用户记忆烦琐的密码问题,以软、硬件相结合的方式,实现了文件加密和解密的功能。具有操作简单、稳定性高、兼容性好、速度快等特点。该系统使用Rockey2加密锁,用delphi进行开发。本文主要介绍了该设计的基本功能及实现方法。在设计与实现中对KEY内存的划分,初始化、文件加密和文件解密进行了详细的分析和说明;在应用与编码中介绍了各个模块的应用与实现;最后介绍了本设计的操作界面及改进方式。关键词:USB;加密锁;加密;解密 The Files Eencryption Tool Based on USB-KEY- Client SideAbstractAlong with the development of the computer, the security demand of the files is increasing. For the sake of encrypting the files of the users to prevent the act of stealing and improving the security of the documents, the security encryption of the documents have become an important issue.This design based on the combination of software and hardware to provide an easy and reliable approach to encrypt files. Password memorization is not necessary. The benefits of this design are easy to use and high stability. This project is coded by Delphi and base on Rockey2( a type of USB key). This paper describes the basic functions and methods to build a files encryption tools based on USB key. Details of implementation are also involved in this paper. Key words:USB;encryption lock;encrypt;decrypt目录论文总页数:25页1 引言11.1 课题背景11.2 国内外研究现状11.3 本设计研究的意义11.4 本设计研究的方法12需求分析12.1 用户问题分析12.2 本设计应满足的需求22.3 本设计的保护技术23设计与实现23.1 程序语言:delphi23.2 USB KEY33.2.1 USB KEY选型33.2.2 Rockey2 加密锁的优点33.2.3 Rockey2 加密锁要点说明33.3 Rockey2 内存分配43.4 总体设计模块43.5客户端逻辑流程53.6客户端设计逻辑流程63.6.1 初始化和写用户名的设计流程图63.6.2 加密设计流程图73.6.3 解密设计流程图84应用与编码94.1硬件的安装94.2控件的使用94.3进度框94.4初始化的应用与编码94.5写用户名和密码的应用与编码114.6文件加密应用与编码134.7文件解密应用与编码164.8查看被加密文件后的信息175操作界面19结 论20参考文献21附 录22致 谢24声 明251 引言1.1 课题背景随着社会高科技,商品经济化突飞猛进的发展,计算机的应用已经普及到经济和社会生活的各个领域。长期以来人们使用各种加密技术以保证计算机中信息的安全,防止被一些有不良用心的人看到或则破坏。在信息时代,信息可以帮助团体和个人,使他们受益,同时,信息也可以对他们构成威胁,造成破坏。在激烈竞争的社会中,大家都会想尽办法获取对方的资料。因此客观上就需要有一种强有力的安全措施来保护我们的机密数据不被窃取和破坏。1.2 国内外研究现状当前对文件加密的方法多种多样,如果按照是否使用附加硬件来区分,可以分为依赖特定硬件的加密方案和不依赖硬件的加密方案。常用对文件加密的方法比如说:winrar文件加密在当今也比较流行。但是winrar有其自身的不足。比如密码太长用户就不方便记忆,有可能会忘记,密码太短又会不安全。如果利用扩展硬件来作为加密和解密就可以有效避免上面的问题。因为它并不需要手工输入密码。密码是保存在扩展硬件当中的。1.3 本设计研究的意义如果使用扩展硬件来进行文件的加密具有访问速度快、可靠性高、保密性好、寿命长等优点。但是以前的加密硬件成本较高,往往用在对安全要求相对较高的场合。随着硬件成本的降低,这种设备已经可以被个人所接受。因此本文描述了一种使用低成本USB Key来辅助进行加密的文件加密系统,可以广泛的应用在个人信息的保护和企业重要文件保护当中。 1.4 本设计研究的方法利用低成本的USB Key来保存加密和解密过程当中的密码,并且实现一个简单的客户端工具。该工具符合大多用户操作WinRAR的习惯,方便的和Windows Shell集成,可以方便的对文件进行加密和解密的操作,同时具有方便、易用、安全的特点。2需求分析2.1 用户问题分析现在的用户都希望能够拥有一种很方便、很快捷的方法去对自己的文件进行加密,操作方式就如WINRAR操作那样方便。并且加密安全强度高。对密码有比较完善的管理。因为现今一些对文件加密的方法在对文件进行加密时都需要用户手动输入密码。如果密码太简单,那么加密过后的文件安全强度不高,文件的安全性就得不到保障;密码太长又不方便用户记忆,并且随时可能忘记密码。所以用户希望能找到一种更好的加密方式。2.2 本设计应满足的需求利用USB KEY文件加密应尽量满足用户的需求,使用户对文件加密和解密的过程操作简单,使用方便。并且对密码也要有完善的管理。使用USB KEY可以在USB Key中保存密码,不在需要用户去手动输入密码,解决了用户去记忆复杂密码的过程。利用USB KEY文件加密需要从两个方面去实现用户的需求,第一:KEY的管理。第二:客户端应用。在KEY的管理方面:主要包括分类管理、客户添加、查看、编辑这几个方面的功能。分类管理是指对锁里面保存的信息进行统一的归类,不同的信息保存在不同的地方。并且对锁里面的相关信息进行记录,如果用户损坏或则丢失了锁,都能给用户提供一把相同的锁。在客户端方面,应该尽量使操作简单,不麻烦,就类似winrar对文件加密的操作一样。这样才能被用户接受。这一方面主要完成文件的加密和解密操作。USB KEY是一种带有USB接口的加密锁。因为USB KEY是一种比较简化型的加密锁,不需要任何驱动程序。并且它具有极高的加密强度,用硬件保存密码,用软件配合来使用。并且携带方便,简单易用,性能稳定。2.3 本设计的保护技术USB KEY文件加密需要有一把硬件KEY,USB KEY是一种智能型加密工具。它是一个安装在USB接口上的硬件电路,同时它有一套使用于各种语言的接口软件和工具软件。当被USB KEY保护的软件运行时,程序向插在计算机上的USB KEY发出查询命令,USB KEY迅速计算查询并给出响应,正确的响应保证软件继续运行。如果没有USB KEY,程序将不能运行,它是将软硬件技术结合起来。这种加密强度比较高。如果KEY丢失了,但是别人没有你的文件和算法,他也不能对文件解密,如果文件和算法被别人获得,但是他没有KEY,同样他也不能对文件解密。它采用软、硬相结合的加密方式。3设计与实现3.1 程序语言:delphiDelphi是Borland公司研制的新一代可视化开发工具,可在各类Windows环境下使用。它拥有一个可视化的集成开发环境(IDE),采用面向对象的编程语言ObjectPascal和基于部件的开发结构框架。Delphi它提供了100多个可供使用的构件,利用这些部件,开发人员可以快速地构造出应用系统。开发人员也可以根据自己的需要修改部件或用Delphi本身编写自己的部件。主要特点如下: (1)直接编译生成可执行代码,编译速度快。由于Delphi编译器采用了条件编译和选择链接技术,使用它生成的执行文件更加精炼,运行速度更快。(2)支持将存取规则分别交给客户机或服务器处理的两种方案,而且允许开发人员建立一个简单的部件或部件集合,封装起所有的规则,并独立于服务器和客户机,所有的数据转移通过这些部件来完成。这样,大大减少了对服务器的请求和网络上的数据传输量,提高了应用处理的速度。 (3)提供了许多快速方便的开发方法,使开发人员能用尽可能少的重复性工作完成各种不同的应用。(4)具有可重用性和可扩展性。开发人员不必再对诸如标签、按钮及对话框等Windows的常见部件进行编程。(5)具有强大的数据存取功能。3.2 USB KEY 3.2.1 USB KEY选型利用USB KEY对文件进行加密和解密时,都需要有一把USB KEY硬件锁作为支配。在众多的KEY中选用Rockey2加密锁作为这个USB KEY。因为Rockey2加密锁是安全性比较高的免驱动的USB 设备,同时售价低。采用的是传统 EPROM 结构。它制作容易,使用方便。而且它象U盘一样方便携带,记录的空间也比较大。适合各类人员对文件进行加密。3.2.2 Rockey2 加密锁的优点1:兼容性好Rockey2加密锁具有高度的透明性,特别是对多个相同的Rockey2加密锁也可以使用USB HUB并联在一起使用,相互之间不会有干扰。2:速度快对于使用Rockey2加密锁加密后的软件,其运行速度同加密前的区别并不大,Rockey2加密锁能够在很短的时间内处理完毕,保证用户程序的顺畅运行3:使用简便Rockey2加密锁最大限度的简化了接口。可以在很短的时间内掌握它的使用方法,从而大大的节约了时间3.2.3 Rockey2 加密锁要点说明每一把 Rockey2 加密锁除了有 1 个独一无二的“硬件ID外”,还有 1 个用户可设定的“用户ID”,我们定义“硬件ID”为 HID,“用户ID”为 UID,这 2 个 ID 都是 32bit 位的 DWORD 数值。每把加密锁都是倚赖这 2 个 ID 作为独一无二的识别标志。 当对Rockey2 加密锁还没有进行初始化的时候,缺省的 UID 为 0,这时候虽然能够使用这个等于0 的 UID 来打开加密锁并进行读写操作,但无法获得正确的 HID,因为当 UID 等于 0 的时候,表示的是出厂状态,这时候 HID 也会返回 0。只有当用户设定了自己的 UID 以后,才能够获得正确的 HID。 在用户生成 UID 的时候需要给出1个长度不超过64个字节的字符串作为种子,加密锁会根据这个种子生成 UID,这个生成算法是在加密锁内部完成的,而且是不可逆的,也就是说,只有生成者才知道什么样的种子能生成什么样的 UID,别的人即使知道 UID,也能够调用这个计算过程,但因为不知道种子是什么,是无法生成你的 UID 的。 另外在生成 UID 的时候,能够指定加密锁的 EPROM 是否是可写的,如果设定为不可写,整个 EPROM 处于写保护状态。3.3 Rockey2 内存分配Rockey2加密锁总共有2560个字节,为了便于管理,把USB KEY的存储空间分配成5个段,每个段为512个字节。在把每个段划分成16个存储区,每个区32个字节。这样便于对KEY的存储空间进行统一的分配和管理。以后向KEY的存储区里面写入的信息时,信息都会自动保存到相关的位置。表3-1 内存分配示意图123456789101112131415160nullsnMd5un1234NULL:空值,没使用SN:密码MD5:加密解密算法UN:用户名3.4 总体设计模块图3-1 USB文件加密总体模块图总体模块分为KEY的管理和客户端两部分。在KEY的管理方面我们需要把KEY里面记录的信息都保存到数据库里面,方便我们查询、修改、添加和删除KEY里面的信息。对每把锁都进行管理,防止有同号锁出现。如果锁因为某种情况损坏或者是丢失了,那么可以通过数据库里面记录的信息复制一把相同的锁,这样就不用担心由于找不到锁而不能对已加密的文件进行解密操作。对锁进行这样更加完善的管理。才能进一步保障被加密文件的安全,让用户才会更加放心的使用。客户端部分主要是完成操作方面的功能,我主要负责客户端的工作。客户端主要包括两方面-文件加密和文件解密。对文件进行加密时,要利用USB KEY中的密码对文件进行加密。这就需要从KEY里面读取出密码并利用该密码并文件进行加密。并且对该密码进行MD5换算。得到密码的MD5值,把这个值称为XID。对文件进行解密时,先从KEY里面读取出密码,然后对密码进行MD5换算,如果换算后的XID与被加密文件的XID一样就可以成功对文件进行解密,否则不能对文件解密。3.5客户端逻辑流程l 初始化:新的USB KEY并不能立即使用,对USB KEY进行初始化,才能对KEY进行读写操作。初始化是利用种子生成UID并且随机产生密码,并将随机生成的密码保存到USB KEY的内存中。初始化成功后,就可以向KEY里面写入用户名,用户名一旦写入就不可更改。l 文件加密:在对文件加密时,我们需要从USB KEY中提取出密码,然后在利用该密码对文件进行加密。l 文件解密:在对文件进行解密时,也需要先从USB KEY中读出密码,然后在对密码进行MD5换算,在把该密码的MD5值与被加密文件的MD5值进行对比,如果是MD5值相同,表明是由同一把Key加密,那么可以对文件进行解密操作,否则Key不匹配,不能对文件解密。3.6客户端设计逻辑流程3.6.1 初始化和写用户名的设计流程图图3-2 初始化和写用户名的设计图对KEY初始化是因为当拿到新KEY后,由于KEY里面是空的,什么信息也没有,那样就不能通过UID去获得正确的HID。所以就需要对锁进行初始化,初始化的过程是在锁的内部完成的,并且是不可逆的。在初始化过程中利用种子去生成UID,并且把随机生成的占有32个字节的密码保存在Key当中,种子是自己定义的含有64个字节的字符串,只有自己才知道这个种子是什么,因为同样的种子生成的UID是相同的。在初始化的过程中还会随机产生密码,就连自己都不知道这个密码是什么,生成这个密码后,把密码保存到KEY中。初始化成功后,就需要向锁里面写入用户名,用户名不能为空,并且用户名也保存到KEY中(用户名是在第一次使用Key对文件加密的时候,由用户输入。客户端软件应该实现这个自动过程)。上面的操作都完成后,就可以利用KEY对文件进行加密和解密了。3.6.2 加密设计流程图读KEY中的密码是否找到USBKEY 没找到KEY,失败文件预处理判断文件是否加密已加密,加密失败加密成功NNYY结束结束开始图3-3 加密设计图在对文件进行加密时,首先要判断USB KEY在计算机上没有,如果没有连接到计算机上,就不能对文件进行加密,因为它找不到KEY,不能从KEY中读取出密码。找到KEY并从KEY中读取出密码后,就可以利用该密码对文件进行加密,在加密过程中需要对文件进行预处理。文件预处理:在对文件进行加密和解密的过程中,需要对文件进行预处理。判别出哪些文件需要加密,哪些文件不需要加密。哪些文件已经加密过。如果我正在使用当前文件,对当前文件正在编辑,那么它就会直接跳过该文件,不会对该文件加密。它还要排除一些不需要的文件,比如链接文件,因为链接文件不是真实的文件,而是指向另外一个文件的“箭头”。或则是已经被加密过的文件。排除一些不需要的文件后,它就可以利用USB KEY中的密码对文件进行加密了,在加密过程中,我们还需要把密码的MD5值保存到被加密文件中,以便判断这个文件是被哪个Key加密的。3.6.3 解密设计流程图Y文件预处理读KEY中的密码是否找到USBKEY 没找到KEY,失败判断密码的MD5值是否和被加密文件中的MD5值相同密码不同解密失败解密成功结束结束NYNN开始图3-4 解密设计图文件进行解密的过程是文件加密的一个逆过程。在对文件进行解密时,首先也需要判断USB KEY连接在计算机上没有,如果没有连接到计算机上,就不能对文件进行解密,因为它不能从KEY中读取出密码,从KEY中读取出密码后,在对密码经过MD5换算,得到密码的MD5值。最后拿密码的MD5值与文件中的MD5值进行对比,如果MD5值相同,就表明是同一把KEY加密的文件,解密成功,否则解密失败。4应用与编码4.1硬件的安装利用USB KEY实现文件加密,当然不能少了KEY,将 Rockey2加密锁插入到和计算机的 USB 接口。某些时候,你可能需要一条 USB 延长线来方便使用。一旦连接后,Rockey2加密锁上的指示灯会被点亮。如果指示灯不亮,请检查你的USB接口或是Rockey2加密锁。在进行加密和解密之前,请确保Rockey2加密锁和计算机成功连接。4.2控件的使用在设计中用到了第三方控件shell控件和flex控件。Shell控件主要是起到文件关联作用。主要实施的是打开和查找文件。USB KEY在对文件进行加密和解密时都需要去关联文件。并且根据SHELL控件对应出不同的弹出菜单,单个文件或则是目录,因为USB KEY对文件进行加密,它只能对单个文件进行加密,不能对整个目录进行加密,它对目录加密也是对目录里面的单个文件进行加密,所以在对文件进行加密和解密时,都需要SHELL控件去找到文件的所在位置。FLEX控件是压缩控件,在对文件加密过后,需要对文件进行压缩,并把用户名、文件名等信息写入到压缩文件中。对文件解密是先对被加密过的压缩文件解压,并从压缩文件中读取出相应的数据。FLEX保存数据是通过数组array来保存结果集合。4.3进度框因为在对文件进行加密和解密时都需要弹出一个进度框。有进度框才能让更清楚的知道文件加密和解密的详细情况,在里面可以看见文件的总数,处理成功的文件的个数,处理警告和处理错误。在处理的过程中,它会自动判断文件是否已经加密,在解密文件过程中,如果该文件不是被加密的文件或则不是被该把KEY加密的文件,他都会给我们跳过那些文件。如果在中途取消对文件加密或则解密的操作,那么以前的操作还是成功的,只是对后面的操作不在进行。在加密解密过程中,会出现当前进程和总进程,里面的蓝色条纹在动说明正在进行操作。没动表明操作结束或失败。4.4初始化的应用与编码初始化是本设计的一个重要过程,新的加密锁并不可以立即使用。但是加密锁是用来对密码进行统一的管理,所以需要把密码写入并保存到加密锁里面。首先定义一个种子,种子的长度不能超过64个字节。它由数字和字母组成。SecureStr=f6a24cac3922c691ad2ce13b64d83c546f994f11e14ada832dd1b9e167e64464,定义种子之后,就可随机产生密码和生成UID。在随机产生密码的过程中,定义一个函数GenPass( ),并且把密码的范围限制在32个字节以内。然后需要随机生成密码,在随机生成密码的过程中调用Random(93)函数。目的是让它产生一个从1到92之间的随机数。但是ASC表中的32为空,为了防止在密码中出现空字符的情况,所以就取32之后的值。/具体实现代码为:begin Randomize; for I := 1 to 32 do begin Pass := Pass + Char(Random(93) + 33); end; Result := Pass;end;随机密码产生后,在初始化过程中就利用种子生成UID。在此过程中定义函数InitRockey(ESeed: string; var UID: Cardinal; ReadOnly: boolean),对KEY进行初始化。然后利用该种子产生密码,产生密码后就直接写入KEY里面。/其关键代码为:Str := ESeed;If ReadOnly then Retcode :=RY2_GenUID(Handle,GUID,PChar(Str),ROCKEY2_ENABLE_WRITE_PROTECT) else Retcode :=RY2_GenUID(Handle,GUID,PChar(Str),ROCKEY2_DISABLE_WRITE_PROTECT); 省略 UID := GUID;产生的GUID的值就是UID的值。最后在对锁进行初始化时,需要锁给出一个询问信息。InitRockyQuery(),询问是否对锁进行初始化。MessageDlg(初始化 Rockey?, mtConfirmation, mbYes, mbNo, 0) = 6。Confirmation在这里使用是在询问框中显示YES或则NO这两个确认按钮。最后,创建一个工程文件,在里面直接调用InitRockyQuery(),它回自动弹出询问信息,点击确定就可以完成这个过程。图4-1 初试化窗口4.5写用户名和密码的应用与编码在初始化完成后,就需要向锁里面写入信息了,写信息是写入用户名。用户名也被记录到KEY里面,成功向Rockey2加密锁写入信息后,就可以对文件进行加密和解密的操作了。用户名写入后就不可更改,所以写入用户名的时候必须确认你要正确的写入用户名。需要设计一个提示输入信息的窗口。在页面的左上角插入一个图片,在设计面板上添加3个Label,并在里面写入需要的内容;在设计一个编辑框Edit,在编辑框里用户可以输入姓名。姓名的Length(S)不能大于32,超过这个范围,不能写入用户名。if Length(S) 32 then begin MessageBox(0, 您输入的姓名大于32个字符,请重新输入!, 姓名过长!, MB_ICONWARNING or MB_OK); exit;用户名里面的值不允许为空。图4-2 输入姓名窗口成功的写入自己的姓名-康桃义后,那么名字就储存到Rockey2加密锁里面了。而且名字不能更改。在CONST中自定义信息,对NC赋值,以后在使用过程中直接调用NC。不在需要对其定义。const NC=您输入的姓名是:%s+#13+#10+注意!一旦确认后,你将不能修改;图4-3姓名确认窗口点击确定后显示确认窗口。MessageBox(0, PChar(format(NC,S), 确认, MB_ICONWARNING or MB_YESNO)=IDYES 写密码和写用户名也很重要,在以后的使用过程中就直接读取里面的信息,不需要在向KEY里面写入信息。写密码的过程中,定义函数WritePass( ),写密码前,还需要对KEY定义一个区段,不然密码写进去后会不知道存放在什么地方;自定义把密码存放在33-64这个存储区域内。然后直接把密码Write进去。/部分代码为:if (not ReadSection(0, Str) then exit; if not OpenKey then exit;MD5Str := MD5DigestToStr(MD5String(Pass); Str := StuffString(Str, 33, 32, Pass); Str := StuffString(Str, 65, 32, Md5Str); Retcode := RY2_Write(HKey, 0, PChar(Str); if retcode 32 then OS := Copy(OS, 1, 32) else OS := O; OS:= Trim(OS); N:=32-Length(OS); for I:=1 to N do begin OS:=OS+#32; end;Str := StuffString(Str, 97, Length(OS), OS); Retcode := RY2_Write(HKey, 0, PChar(Str);4.6文件加密应用与编码在本设计中,加密解密的操作过程需要用到shell控件和FLEX控件,这两个都是DPK文件的控件包。由于Delphi 7.0默认情况下没有安装此控件,因此需要手动添加。首先需要添加该控件的路径,在tools-environment options-library path中加进该文件的路径。然后在Delphi中File-Open(下拉列表框中选*.dpk)-install即可。此设计中要用到shell的扩展,shell的扩展是指能够添加某种功能到windows shell的com对象。由于空间已经安装成功,那么在delphi中建立一个shell module,在上面放置contextmenu控件、flex控件、popupmenu控件和image。Contextmenu主要使用在当用户右键单击文件或文件夹对象时,或在一个文件夹窗口中的背景处单击右键时被调用。把Contextmenu指向popupmenu。双击popupmenu后在里面添加加密-文件和解密文件。 让popupmenu中的事件指向imagelist。在imagelist中添加所需要的图标。Felx控件在事件中需要于progress进度框关联起来。在实现文件加密的过程中,要对KEY作一个判断,看KEY是否连接在计算机上或则是使用的KEY是否正确。利用MessageBox()弹出此窗口提示错误信息。这样表明KEY不可用。 图4-4 初试化错误窗口/其部分代码为:begin if (not ReadPass(Pass, HID, FileOwner) then beginMessageBox(0, 系统无法找到你的 USB钥匙! + #13 + #10 + 请你检查USB钥匙后再试。, USB 钥匙初始化错误!, MB_ICONWARNING or MB_OK); exit; end; 在文件的加密过程中,需要对文件进行预处理,因为要加密的文件可能是一个文件或则多个文件;还可以是一个目录或者多个目录,利用USB KEY文件加密它不能对目录进行加密,只能对文件进行加密。如果得到是一个目录文件GetFolderFiles,那么寻找文件的路径,CPath := Path + ;。找到符合条件的文件,然后把这些符合条件的文件添加到列表。然后在加密过程中对这些文件进行递归查找。/其部分代码为:/添加符合条件的文件到列表 if (SearchRec.Attr and faDirectory) = 0) then begin AllFiles.Add(SPath); PForm.StatusBar.Panels1.Text := IntToStr(AllFiles.Count) + -个文件; Application.ProcessMessages; end; /递归查找 if (DirectoryExists(SPath) and (SearchRec.Name .) and (SearchRec.Name .) then GetFolderFiles(SPath); end;在加密过程中,需要与进度窗口对应起来,在在进度框这里面设立4个过程,AddError,AddMsg,MsgCancel,MsgOk它们没有返回值。AddError是表明出错的原因,AddMsg表明当前处理的文件完成后直接对下一个文件在继续进行处理,MsgCancel表明用户取消操作,MsgOk表明处理成功。通过利用TShellModule.FlexFileProgress使加密过程与进度提示窗口相联系起来,/文件处理中对弹出窗口的进度控制。其主要代码为:procedure TShellModule.FlexFileProgress(Sender: TObject; FileName: string; Progress: Double; Operation: TFXCProcessOperation; ProgressPhase: TFXCProgressPhase; var Cancel: Boolean);begin PForm.CProcess.Position := Round(Progress); Application.ProcessMessages;end;提示窗显示当前正在加密文件的进度,以及提示错误信息。错误信息用红色字体表示。加密完成给出一个统计信息。如果没有任何的错误或提示信息,在加密完成后,该窗口自动关闭,否则需要单击“确定”来关闭该窗口。图4-5 文件加密窗口在加密文件时弹出的进度框中分为当前进程和总进程。当前进程中是展示单个文件被加密的进度,总进程展示所有文件的加密进度。把所有文件的记录条数赋值给总进程:PForm.AProcess.Max := AllFiles.Count,当前进程中处理完一个文件后要继续处理下一个文件,直到所有的文件处理完成。PForm.AProcess.Position := PForm.AProcess.Position + 1在加密过程中,通过压缩控件FLEX,对文件进行压缩。并从KEY中取出密码,用此密码对文件进行加密。加密成功后,删除源文件,保留被压缩的文件。压缩文件里面保留用户名,文件名等信息。如果不能删除源文件,文件加密失败。/加密实现部分代码为Flex.FileName := EFile;Flex.Password := Pass;Flex.OpenArchive;Flex.AddFiles(AllFilesI);Flex.Comment := FileOwner + CR + HID;Flex.CloseArchive;if CanDel then begin/文件加密成功!Deled := DeleteFile(AllFilesI);if not Deled then begin/源文件共享,不能删除,那么删除加密文件,保留源文件!PForm.AddError(Format(MsgDelError,ExtractFileName(AllFilesI);DeleteFile(EFile);end else DoneCount := DoneCount + 1;end else begin/文件加密失败!CanDel := True;PForm.AddError(Format(MsgError,ExtractFileName(AllFilesI);DeleteFile(EFile);end;end;end; 4.7文件解密应用与编码同样,解密过程也会出现如同加密过程中的进度提示窗口,其设计过程和加密过程一样。它是加密的一个逆过程。如果解密的的钥匙正确,但是没有以前没有对文件进行加密,那么它就会跳过该文件。不会对该文件进行解密。在解密文件的过程中,如果没有插入Rockey2加密锁或则插入的Rockey2加密锁不正确,那么解密就会失败,就不能成功的对文件进行解密。图4-6 文件解密窗口在解密过程中需要去寻找压缩包中的文件,利用FLEX控件对其进行解压,从被加密过的文件中提取出原始文件名。/解密实现部分代码为:Flex.FileName := AllFilesI;Flex.Password := Pass;Flex.BaseDir := ExtractFilePath(AllFilesI);Flex.OpenArchive;/寻找压缩包中的文件Flex.FindFirst(*.*, F);if FileExists(Flex.BaseDir + F.FileName) then beginPForm.AddError(format(MsgSrcFileFound, ExtractFileName(AllFilesI), F.FileName);Flex.CloseArchive;continue;end;Flex.ExtractFiles(*.*);Flex.CloseArchive;/解密成功if CanDel then beginDeled := DeleteFile(AllFilesI);if not Deled then beginPForm.AddError(Format(MsgDelError, ExtractFileName(AllFilesI);DeleteFile(Copy(AllFilesI, 1, Length(AllFilesI) - 4);end else DoneCount := DoneCount + 1;end else beginCanDel := True;PForm.AddError(Format(MsgPassError, ExtractFileName(AllFilesI);DeleteFile(Copy(AllFilesI, 1, Length(AllFilesI) - 4);end;end;end;4.8查看被加密文件后的信息文件被加密过后都会出现如下图所示的图标,我们如果没有KEY的话对该文件不能解密,但是可以看到加密过后的信息。这种文件的后缀名为twe。那么可以建立一个工程文件,编译出能打开twe文件的exe文件。在设计面板中插入一幅图片,并在上面添加FLEX控件,在图象显示栏中添加listbox,目的是使信息能在里面显示出来。在程序中设立3个对象FormKeyPress,Image1Click,FormShow。前两个是用来指定执行退出操作。FormShow是用来查看被加密文件里面的一些信息。图4-7 文件信息窗口它里面包含四行信息,依次是:加密者姓名、USB钥匙的硬件编号、原始文件名和加密的时间。单击除文件信息以外的区域来关闭该窗口。里面的四行信息是利用FLEX压缩控件对文件进行压缩后保存在里面的。在操作过程中对文件的时间进行转换,把时间设定成系统对文件进行加密时的操作时间。里面的时间格式也被设成为Model = yyyy-mm -dd, hh: mm: ss。/查看信息的关键代码为:begin Info.Clear; FName := ParamStr(1); if FileExists(FName) then begin Flex.FileName := FName; Flex.OpenArchive; Info.Lines.Text := Flex.Comment; Flex.FindFirst(*.*, F); Info.Lines.Add(F.FileName); Flex.CloseArchive; CTime := GetFileTime(FName); Info.Lines.Add(FormatDateTime(yyyy-mm-dd hh:nn:ss, CTime); Info.SelStart:=0; end;5操作界面把elockapi.dll文件和TwEnc.dll文件拷贝到windows目录中,用户在以后操作中就直接可以对DLL文件进行调用。以下为把twenc.dll写入到注册表中。图5-1 把DLL写入注册表把客户端的操作界面做成类似于WINRAR的操作界面,那么就需要在鼠标右键中添加密文件和解密文件,以方便用户操作,使用户直接点击右键就能完成加密和解密的功能。这就需要修改系统的注册表,为避免在DOS环境下去修改,那么我们只需要建立一个记事本,在记事本中写入Regsvr32 twenc.dll。并保存为BAT格式。在双击它。然后会成功添加鼠标右键后,以后单击鼠标右键就会出现象WINRAR一样的右键图标。对文件进行加密和解密的操作时,就会会出现加密或则解密的图标。对目录进行加密或则解密时,会同时出现加密目录和解密目录的图标。图5-2 写入成功A:本客户端在对文件进行加密的操作过程中,只能对单个文件进行加密,不能对目录进行加密,对目录进行加密时,也仅仅是对目录里面的文件进行加密。 图5-3加密解密文件图标 图5-4加密解密目录图标对文件进行加密时,在要加密的文件上单击右键,就会出现加密-文件的图标和字样;同样对已经加密过的文件进行解密操作时,在被加密的文件上单击鼠标右键也会出现解密文件的图标和字样。B:对文件夹进行加密的时候,就会出现加密-目录和解密-目录的图标和字样,而不会出现加密-文件的图标和字样,对目录加密不是对目录本身进行加密,而是对目录下面的文件进行加密,如果目录下面还含有目录,那么它会逐级去寻找下一目录里的文件,依次类推。直至完成对文件的加密或解密。结 论目前,经过紧张而有序的毕业设计,基于USB KEY的文件加密工具-客户端的主体功能已全面实现。操作界面简洁,操作方便,功能齐全,实现了加密文件、加密目录、解密文件和解密目录的功能,基本实现了办公自动化。基于USB KEY的文件加密工具-客户端是自己完成的第一个项目,通过这次毕业设计我学到了很多知识,进一步掌握了Delphi语言,对Rockey2加密锁也有了更深层次的认识。对文件的保密功能也有了更深入的了解。明白了文件安全的重要性。1:问题分析虽然已经实现了基于USB KEY的文件加密工具-客户端的基本功能,但是由于能力和时间有限,功能上还有很多不足之处。因为没有一种加密方式是绝对安全的,利用Rockey2 加密锁对文件进行加密和解密也不例外。利用Rockey2加密锁对文件进行加密,需要的是一把硬件锁,锁里面记录了用户的密码等一系列资料。如果别人复制一把相同的加密锁,那么同样可以对已加密的文件进行解密。利用USB KEY的文件加密工具对文件进行加密。因为加密锁带有USB接口,所以它是通过USB 接口来读取加密锁里面的信息。那么加密锁就要连接到计算上,凡是连接到计算机上的信息都存在不安全的因素, KEY里面保存的信息就有可能被某种软件破解,如果一旦破解保存在加密锁里面的信息,别人就可以复制一把相同锁。对文件进行解密。2:改进方案Rockey2 加密锁在对文件加密和解密的过程中只是调用KEY中的密码,而加密和解密的实现过程是在计算机上完成的。如果把对文件加密和解密的实现过程放在加密锁内部去完成,那样就更加能够提高文件加密和解密的安全强度。目前这种加密方式可能会存在操作速度慢,价格昂贵等一些缺点。在短时间内还不会适用于个人用户。相信在不久的将来,这种加密技术通过不断的发展,一种更加安全的文件加密方式就会出现在用户的面前。参考文献1 明日科技.Delphi函数参考大全M.北京:人民邮电出版社,2006。2 刘艺.Delphi模式编程-Borband核心技术丛书M.北京:机械工业出版社,2004。3 王沛.Delphi 7编程入门篇M.北京:机械工业出版社,2006。4 周爱民.Delphi源代码分析.北京:电子工

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论