基于USB KEY的文件加密工具-客户端的实现_第1页
基于USB KEY的文件加密工具-客户端的实现_第2页
基于USB KEY的文件加密工具-客户端的实现_第3页
基于USB KEY的文件加密工具-客户端的实现_第4页
基于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 程序语言:delphi .23.2 USB KEY.33.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声 明 .25第 1 页 共 25 页1 引言1.1 课题背景随着社会高科技,商品经济化突飞猛进的发展,计算机的应用已经普及到经济和社会生活的各个领域。长期以来人们使用各种加密技术以保证计算机中信息的安全,防止被一些有不良用心的人看到或则破坏。在信息时代,信息可以帮助团体和个人,使他们受益,同时,信息也可以对他们构成威胁,造成破坏。在激烈竞争的社会中,大家都会想尽办法获取对方的资料。因此客观上就需要有一种强有力的安全措施来保护我们的机密数据不被窃取和破坏。1.2 国内外研究现状当前对文件加密的方法多种多样,如果按照是否使用附加硬件来区分,可以分为依赖特定硬件的加密方案和不依赖硬件的加密方案。常用对文件加密的方法比如说:winrar 文件加密在当今也比较流行。但是 winrar有其自身的不足。比如密码太长用户就不方便记忆,有可能会忘记,密码太短又会不安全。如果利用扩展硬件来作为加密和解密就可以有效避免上面的问题。因为它并不需要手工输入密码。密码是保存在扩展硬件当中的。1.3 本设计研究的意义如果使用扩展硬件来进行文件的加密具有访问速度快、可靠性高、保密性好、寿命长等优点。但是以前的加密硬件成本较高,往往用在对安全要求相对较高的场合。随着硬件成本的降低,这种设备已经可以被个人所接受。因此本文描述了一种使用低成本 USB Key来辅助进行加密的文件加密系统,可以广泛的应用在个人信息的保护和企业重要文件保护当中。 1.4 本设计研究的方法利用低成本的 USB Key来保存加密和解密过程当中的密码,并且实现一个简单的客户端工具。该工具符合大多用户操作 WinRAR的习惯,方便的和Windows Shell集成,可以方便的对文件进行加密和解密的操作,同时具有方便、易用、安全的特点。2需求分析2.1 用户问题分析现在的用户都希望能够拥有一种很方便、很快捷的方法去对自己的文件进行加密,操作方式就如 WINRAR操作那样方便。并且加密安全强度高。对密码有比较完善的管理。因为现今一些对文件加密的方法在对文件进行加密时都需要用户手动输入密码。如果密码太简单,那么加密过后的文件安全强度不高,文件的安全性就得不到保障;密码太长又不方便用户记忆,并且随时可能忘记密第 2 页 共 25 页码。所以用户希望能找到一种更好的加密方式。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本身编写自己的部件。主要特点如第 3 页 共 25 页下: (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 的时候,表示的是第 4 页 共 25 页出厂状态,这时候 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 内存分配示意图1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 null sn Md5 un1234NULL:空值,没使用SN:密码MD5:加密解密算法UN:用户名3.4 总体设计模块第 5 页 共 25 页图 3-1 USB文件加密总体模块图总体模块分为 KEY的管理和客户端两部分。在 KEY的管理方面我们需要把KEY里面记录的信息都保存到数据库里面,方便我们查询、修改、添加和删除KEY里面的信息。对每把锁都进行管理,防止有同号锁出现。如果锁因为某种情况损坏或者是丢失了,那么可以通过数据库里面记录的信息复制一把相同的锁,这样就不用担心由于找不到锁而不能对已加密的文件进行解密操作。对锁进行这样更加完善的管理。才能进一步保障被加密文件的安全,让用户才会更加放心的使用。客户端部分主要是完成操作方面的功能,我主要负责客户端的工作。客户端主要包括两方面-文件加密和文件解密。对文件进行加密时,要利用 USB KEY中的密码对文件进行加密。这就需要从 KEY里面读取出密码并利用该密码并文件进行加密。并且对该密码进行 MD5换算。得到密码的 MD5值,把这个值称为 XID。对文件进行解密时,先从 KEY里面读取出密码,然后对密码进行 MD5换算,如果换算后的 XID与被加密文件的 XID一样就可以成功对文件进行解密,否则不能对文件解密。3.5客户端逻辑流程 初始化:新的 USB KEY并不能立即使用,对 USB KEY进行初始化,才能对 KEY进行读写操作。初始化是利用种子生成 UID并且随机产生密码,并将随机生成的密码保存到 USB KEY的内存中。初始化成功后,就可以向 KEY里面写入用户名,用户名一旦写入就不可更改。 文件加密:在对文件加密时,我们需要从 USB KEY中提取出密码,然后在利用该密码对文件进行加密。 文件解密:在对文件进行解密时,也需要先从 USB KEY中读出密码,然后在对密码进行 MD5换算,在把该密码的 MD5值与被加密文件的 MD5值进行对比,如果是MD5值相同,表明是由同一把 Key加密,那么可以对文件进行解密操作,否则Key不匹配,不能对文件解密。第 6 页 共 25 页3.6客户端设计逻辑流程3.6.1 初始化和写用户名的设计流程图图 3-2 初始化和写用户名的设计图对 KEY初始化是因为当拿到新 KEY后,由于 KEY里面是空的,什么信息也没有,那样就不能通过 UID去获得正确的 HID。所以就需要对锁进行初始化,初始化的过程是在锁的内部完成的,并且是不可逆的。在初始化过程中利用种子去生成 UID,并且把随机生成的占有 32个字节的密码保存在 Key当中,种子是自己定义的含有 64个字节的字符串,只有自己才知道这个种子是什么,因为同样的种子生成的 UID是相同的。在初始化的过程中还会随机产生密码,就连自己都不知道这个密码是什么,生成这个密码后,把密码保存到 KEY中。初始化成功后,就需要向锁里面写入用户名,用户名不能为空,并且用户名也保存到 KEY中(用户名是在第一次使用 Key对文件加密的时候,由用户输入。客户端软件应该实现这个自动过程) 。上面的操作都完成后,就可以利用 KEY对文件进行加密和解密了。第 7 页 共 25 页3.6.2 加密设计流程图读 KEY 中的密码是否找到USBKEY没找到 KEY,失败文件预处理判断文件是否加密 已加密,加密失败加密成功NNYY结束结束开始图 3-3 加密设计图在对文件进行加密时,首先要判断 USB KEY在计算机上没有,如果没有连接到计算机上,就不能对文件进行加密,因为它找不到 KEY,不能从 KEY中读取出密码。找到 KEY并从 KEY中读取出密码后,就可以利用该密码对文件进行加密,在加密过程中需要对文件进行预处理。文件预处理:在对文件进行加密和解密的过程中,需要对文件进行预处理。判别出哪些文件需要加密,哪些文件不需要加密。哪些文件已经加密过。如果我正在使用当前文件,对当前文件正在编辑,那么它就会直接跳过该文件,不会对该文件加密。它还要排除一些不需要的文件,比如链接文件,因为链接文件不是真实的文件,而是指向另外一个文件的“箭头” 。或则是已经被加密过的文件。排除一些不需要的文件后,它就可以利用 USB KEY中的密码对文件进行加第 8 页 共 25 页密了,在加密过程中,我们还需要把密码的 MD5值保存到被加密文件中,以便判断这个文件是被哪个 Key加密的。3.6.3 解密设计流程图Y文件预处理读 KEY 中的密码是否找到USBKEY没找到 KEY,失败判断密码的 MD5 值是否和被加密文件中的 MD5 值相同密码不同解密失败解密成功结束结束NYNN开始图 3-4 解密设计图文件进行解密的过程是文件加密的一个逆过程。在对文件进行解密时,首先也需要判断 USB KEY连接在计算机上没有,如果没有连接到计算机上,就不能对文件进行解密,因为它不能从 KEY中读取出密码,从 KEY中读取出密码后,在对密码经过 MD5换算,得到密码的 MD5值。最后拿密码的 MD5值与文件中的MD5值进行对比,如果 MD5值相同,就表明是同一把 KEY加密的文件,解密成第 9 页 共 25 页功,否则解密失败。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个字节。它由数字和字母组成。第 10 页 共 25 页SecureStr=f6a24cac3922c691ad2ce13b64d83c546f994f11e14ada832dd1b9e167e64464,定义种子之后,就可随机产生密码和生成 UID。在随机产生密码的过程中,定义一个函数 GenPass( ),并且把密码的范围限制在 32个字节以内。然后需要随机生成密码,在随机生成密码的过程中调用Random(93)函数。目的是让它产生一个从 1到 92之间的随机数。但是 ASC表中的 32为空,为了防止在密码中出现空字符的情况,所以就取 32之后的值。/具体实现代码为:beginRandomize;for I := 1 to 32 do beginPass := Pass + Char(Random(93) + 33);end;Result := Pass;end;随机密码产生后,在初始化过程中就利用种子生成 UID。在此过程中定义函数 InitRockey(ESeed: string; var UID: Cardinal; ReadOnly: boolean),对 KEY进行初始化。然后利用该种子产生密码,产生密码后就直接写入 KEY里面。/其关键代码为:Str := ESeed;If ReadOnlythen 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() ,它回自第 11 页 共 25 页动弹出询问信息,点击确定就可以完成这个过程。图 4-1 初试化窗口4.5写用户名和密码的应用与编码在初始化完成后,就需要向锁里面写入信息了,写信息是写入用户名。用户名也被记录到 KEY里面,成功向 Rockey2加密锁写入信息后,就可以对文件进行加密和解密的操作了。用户名写入后就不可更改,所以写入用户名的时候必须确认你要正确的写入用户名。需要设计一个提示输入信息的窗口。在页面的左上角插入一个图片,在设计面板上添加 3个 Label,并在里面写入需要的内容;在设计一个编辑框Edit,在编辑框里用户可以输入姓名。姓名的 Length(S)不能大于 32,超过这个范围,不能写入用户名。if Length(S) 32 then beginMessageBox(0, 您输入的姓名大于 32个字符,请重新输入!, 姓名过长!, MB_ICONWARNING or MB_OK);exit;用户名里面的值不允许为空。图 4-2 输入姓名窗口成功的写入自己的姓名-康桃义后,那么名字就储存到 Rockey2加密锁里面了。而且名字不能更改。第 12 页 共 25 页在 CONST中自定义信息,对 NC赋值,以后在使用过程中直接调用 NC。不在需要对其定义。constNC=您输入的姓名是:%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 beginOS:=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中 FileOpen(下拉列表框中选*.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第 14 页 共 25 页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 beginAllFiles.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);beginPForm.CProcess.Position := Round(Progress);第 15 页 共 25 页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;第 16 页 共 25 页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加密锁不正确,那么解密就会失败,就不能成功的对文件进行解密。第 17 页 共 25 页图 4-6 文件解密窗口在解密过程中需要去寻找压缩包中的文件,利用 FLEX控件对其进行解压,从被加密过的文件中提取出原始文件名。/解密实现部分代码为:Flex.FileName := AllFilesI;Flex.Password := Pass;Flex.BaseDir := ExtractFilePath(AllFilesI);Flex.Op

温馨提示

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

评论

0/150

提交评论