基于DES加密算法的WORD加密插件的实现

上传人:ning****hua 文档编号:107363853 上传时间:2022-06-14 格式:DOC 页数:22 大小:220.50KB
返回 下载 相关 举报
基于DES加密算法的WORD加密插件的实现_第1页
第1页 / 共22页
基于DES加密算法的WORD加密插件的实现_第2页
第2页 / 共22页
基于DES加密算法的WORD加密插件的实现_第3页
第3页 / 共22页
点击查看更多>>
资源描述
基于DES加密算法的WORD加密插件的实现摘 要随着社会发展,社会进入信息时代。信息技术和信息产业正在改变传统的生产经营和生活方式,信息已成为社会发展的重要战略资源。如今,Office办公文档已是日常办公生活中不可缺少的一部分,与此同时伴随而来的信息安全问题也日益突出。如何确保Word文档中的内容不被未授权的第三方所知,防止重要信息被随意改动,成为当务之急。如果在Word工具栏中添加一个加密插件,可以对文档全部内容或部分内容加密,便能有效防止信息泄漏。本论文采用VB编写Word插件,通过采用Windows下的动态链接库技术(DLL),在VC中把DES算法封装起来做成DLL模块供VB调用,实现了开发加密插件时对加密函数的调用,提高了加密算法的效率。通过使用该插件在Word中添加的工具按键,便能简单有效地对文档内容加解密,使用户在操作WORD文档时更加方便安全。关键词:加密插件;信息安全;COM组件;动态链接库目 录论文总页数:20页1引言11.1选题背景11.2选题意义12理论基础22.1 DES算法描述22.1.1 DES算法框图22.1.2 DES解密32.1.3 DES算法原理32.2 COM组件简介52.2.1 组件52.2.2 接口62.2.3 创建72.2.4 复用82.3 插件简介83 需求分析和方案设计83.1 需求分析83.1.1功能需求83.1.2 开发环境93.2 方案设计104 程序的实现104.1 VC建立DES算法模块104.1.1 加密导出函数的定义114.1.2解密导出函数的定义114.1.3加解密相关函数的声名114.2 VB编写WORD插件124.2.1建立Word插件工程124.2.2 Word代码的编写145 测试16结 论17参考文献18致 谢19声 明20商业源代码,全套计算机毕业设计免费下载 更多全套设计联系QQ:1042897696最新设计大全 1 引言1.1选题背景 DES是Data Encryption Standard(数据加密标准)的缩写。它是由IBM公司研制的一种加密算法,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准,二十多年来,它一直活跃在国际保密通信的舞台上,扮演了十分重要的角色。 DES是一个分组加密算法,他以64位为分组对数据加密。同时DES也是一个对称算法:加密和解密用的是同一个算法。它的密匙长度是56位(因为每个第8 位都用作奇偶校验),密匙可以是任意的56位的数,而且可以任意时候改变。其中有极少量的数被认为是弱密匙,但是很容易避开他们。所以保密性依赖于密钥。按照组件化的程序设计的思想,复杂的应用程序被设计成一些小的,功能单一的组件模块,这些组件模块可以运行在同一台机器上,也可以运行在不同的机器上。为了实现这样的应用软件,组件程序和组件程序之间需要一些极为细致的规范,只有组件程序遵守了这些共同的规范,然间系统才能正常运行。为此,OMG和Microsoft分别提出了CORBA(Common Object Request Breaker Architecture)和COM(Component Object model)标准,目前CORBA模型主要应用于UNIX操作系统平台上,而COM 则主要应用于Microsoft Windows操作系统平台上。 在COM标准中,一个组件程序也被称为一个模块,它可以是一个动态连接库(DLL), 被称为进程内组件(in-of-process component),也可以是一个可执行程序(EXE),被称为进程外组件(out-of-process component)。COM对象是建立在二进制可执行代码级的基础上,而C+等语言中的对象是建立在源代码级基础上的,因此COM对象是语言无关的。这一特性使用不同编程语言开发的组件对象进行交互成为可能。在Microsoft Windows系统平台上,COM技术被应用于系统的各个层次,从底层的COM对象管理到上层的应用程序交互都用到了COM标准。1.2选题意义Word是当今非常流行的一款字处理软件,是装机的必备程序。但随之而来的信息安全问题也收到普遍关注。为了防止信息财产被故意或偶然地非授权泄漏,保护用户的利益和隐私,有必要对文档进行加密。目前Word文档可以通过设置密码来决定用户是否有打开文档的权限,从而保护文档信息安全。这样是对整个文件的操作,并且必须要有密码配合。我们可以通过一个插件对文档内容加解密,这样使用起来更加简单方便。2理论基础2.1 DES算法描述2.1.1 DES算法框图DES对64(bit)位的明文分组M进行操作,M经过一个初始置换IP置换成m0,将m0明文分成左半部分和右半部分m0=(L0,R0),各32位长。然后进行16轮完全相同的运算,这些运算被称为函数f,在运算过程中数据与密匙结合。经过16轮后,左,右半部分合在一起经过一个末置换。 在每一轮中,密匙位移位,然后再从密匙的56位中选出48位。通过一个扩展置换将数据的右半部分扩展成48位,并通过一个异或操作替代成新的32位数据,在将其置换换一次。这四步运算构成了函数f。然后,通过另一个异或运算,函数f的输出与左半部分结合,其结果成为新的右半部分,原来的右半部分成为新的左半部分。将该操作重复16次,就实现了。具体如图1所示:商业源代码,全套计算机毕业设计免费下载 更多全套设计联系QQ:1042897696最新设计大全 图1 DES算法框图2.1.2 DES解密 加密和解密使用相同的算法。 DES加密和解密唯一的不同是密匙的次序相反。如果各轮加密密匙分别是K1,K2,K3.K16那么解密密匙就是K16,K15,K14K1。2.1.3 DES算法原理(1)处理密钥:从用户处获得64位密钥.(每第8位为校验位,为使密钥有正确的奇偶校验,每个密钥要有奇数个1位.(本文如未特指,均指二进制位)(2)具体过程:对密钥实施变换,使得变换以后的密钥的各个位与原密钥位对应关系如下表所示:57 49 41 33 25 17 9 1 58 50 42 34 26 1810 2 59 51 43 35 27 19 11 3 60 52 44 3663 55 47 39 31 23 15 7 62 54 49 38 30 2214 6 61 53 45 37 29 21 13 5 28 20 12 4把变换后的密钥等分成两部分,前28位记为C0,后28位记为D0.计算子密钥(共16个), 从i=1开始。分别对Ci-1,Di-1作循环左移来生成Ci,Di.(共16次)。每次循环左移位数如下表所示:轮 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16位数 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1串联Ci,Di,得到一个56位数,然后对此数作如下变换以产生48位子密钥Ki。变换过程如下:14 17 11 24 1 5 3 28 15 6 21 1023 19 12 4 26 8 16 7 27 20 13 241 52 31 37 47 55 30 40 51 45 33 4844 49 39 56 34 53 46 42 50 36 29 32按以上方法计算出16个子密钥。对64位数据块的处理:把数据分成64位的数据块,不够64位的以适当的方式填补。对数据块作变换。58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 462 54 46 38 30 22 14 6 64 56 48 40 32 24 16 857 49 41 33 25 17 9 1 59 51 43 35 27 19 11 361 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7将变换后的数据块等分成前后两部分,前32位记为L0,后32位记为R0。用16个子密钥对数据加密。根据下面的扩冲函数E,扩展32位的成48位32 1 2 3 4 5 4 5 6 7 8 98 9 10 11 12 13 12 13 14 15 16 1716 17 18 19 20 21 20 21 22 23 24 2524 25 26 27 28 29 28 29 30 31 32 1用ERi-1与Ki作异或运算。把所得的48位数分成8个6位数。1-6位为B1,7-12位为B2,. 43-48位为B8。用S密箱里的值替换Bj。从j=1开始。S密箱里的值为4位数,共8个S密箱.取出Bj的第1和第6位串联起来成一个2位数,记为m.m即是S密箱里用来替换Bj的数所在的列数。取出Bj的第2至第5位串联起来成一个4位数,记为n。n即是S密箱里用来替换Bj的数所在的行数。用S密箱里的值Sj m n替换Bj。8个S密箱如下所示:S-BOXE:S1Binary d1d6 =; 00 01 10 11/ d2.d5 / Dec 0 1 2 3.1100 12 5 0 15 31101 13 0 14 3 51110 14 12 9 5 61111 15 7 2 8 11返回第一步直至8个数据块都被替换。把B1至B8顺序串联起来得到一个32位数。对这个数做如下变换:bit goes to bit bit goes to bit16 1 2 177 2 8 1820 3 24 1921 4 14 2029 5 32 2112 6 27 2228 7 3 2317 8 9 241 9 19 2515 10 13 2623 11 30 2726 12 6 285 13 22 2918 14 11 3031 15 4 3110 16 25 32把得到的结果与Li-1作异或运算。把计算结果賦给Ri。把Ri-1的值賦给Li。从a循环执行,直到K16也被用到。把R16和L16 顺序串联起来得到一个64位数。对这个数实施II变换的逆变换。以上就是DES算法如何加密一段64位数据块。解密时用同样的过程,只需把16个子密钥的顺序颠倒过来,应用的顺序为K16,K15,K14,.K1。 2.2 COM组件简介2.2.1 组件COM,是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块;等等。 COM是开发软件组件的一种方法。组件实际上是一些小的二进制可执行程序,它们可以给应用程序,操作系统以及其他组件提供服务。开发自定义的COM组件就如同开发动态的,面向对象的API。多个COM对象可以连接起来形成应用程序或组件系统。并且组件可以在运行时刻,在不被重新链接或编译应用程序的情况下被卸下或替换掉。Microsoft的许多技术,如ActiveX, DirectX以及OLE等都是基于COM而建立起来的。并且Microsoft的开发人员也大量使用COM组件来定制他们的应用程序及操作系统。COM所含的概念并不止是在Microsoft Windows操作系统下才有效。COM并不是一个大的API,它实际上象结构化编程及面向对象编程方法那样,也是一种编程方法。在任何一种操作系统中,开发人员均可以遵循“COM方法”。一个应用程序通常使由单个的二进制文件组成的。当编译器生成应用程序之后,在对下一个版本重新编译并发行新生成的版本之前,应用程序一般不会发生任何变化。操作系统,硬件及客户需求的改变都必须等到整个应用程序被重新生成。目前这种状况已经发生变化。开发人员开始将单个的应用程序分隔成单独多个独立的部分,也既组件。这种做法的好处是可以随着技术的不断发展而用新的组件取代以有的组件。此时的应用程序可以随新组件不断取代旧的组件而渐趋完善。而且利用已有的组件,用户还可以快速的建立全新的应用。传统的做法是将应用程序分割成文件,模块或类,然后将它们编译并链接成一个单模应用程序。它与组件建立应用程序的过程(称为组件构架)有很大的不同。一个组件同一个微型应用程序类似,即都是已经编译链接好并可以使用的二进制代码,应用程序就是由多个这样的组件打包而得到的。单模应用程序只有一个二进制代码模块。自定义组件可以在运行时刻同其他的组件连接起来以构成某个应用程序。在需要对应用程序进行修改或改进时,只需要将构成此应用程序的组件中的某个用新的版本替换掉即可。COM,即组件对象模型,是关于如何建立组件以及如何通过组件建立应用程序的一个规范,说明了如何可动态交替更新组件。2.2.2 接口对于COM来讲,接口是一个包含一个函数指针数组的内存结构。每一个数组元素包含的是一个由组件所实现的函数地址。对于COM而言,接口就是此内存结构,其他东西;均是COM不关心的实现细节。在C+中,可以用抽象基类来实现COM接口。由于一个COM组件可以实现支持任意数目的接口,因此对于这样的组件,可以用抽象基类的多重继承来实现。用类来实现组件将比其他方法更为容易。对于客户来说,一个组件就是一个接口集。客户只能通过接口才能和COM组件打交道。从整体上讲,客户对于一个组件可以说是知之甚少的。通常情况下,客户甚至不必知道一个组件所提供的所有接口。客户同组件的交互是通过接口完成的。在客户查询组件其他的接口时,也是通过接口完成的。这个接口就是IUnknown。Iunknown接口的定义包含在Win32 SDK中的UNKNOWN.H的头文件中,引用如下:interface IUnknownvirtual HRESULT-_ _stdcall QueryInterface(const IID& iid,void *ppv)=0;virtual ULONG_ _stdcall AddRef()=0;virtual ULONG_ _Release()=0;所有的COM都要继承IUnknown。可以用Iunknown的接口指针来查询该组件的其他的接口,并且每个接口的vtbl中的前三个函数都是QueryInterface,AddRef和Release。这使得所有的COM接口都可以被当作成IUnknown接口来处理。由于所有的接口都支持QueryInterface,因此组件的任何一个接口都可以被客户用来获取它所支持的其他接口。在用QueryInterface将组件抽象成由多个相互独立的接口构成的集合后,还需要管理组件的生命期。这一点是通过对接口的引用计数实现的。客户并不能直接控制组件的生命期。当使用完一个接口而要用组件的另一个接口时,是不能将改组件释放的。对组件的释放可以由组件在客户使用完所有的组件之后自己完成。IUnknown的另外两个成员函数AddRef和Release的作用就是给客户提供一种让它指示何时处理完一个接口的手段。AddRef和Release实现的是一种名为引用技术的内存管理技术。当客户从组件获得一个接口时,此引用计数值将增1。当客户使用完某个接口时,组件的引用计数值将减1,当引用计数值为0时,组件可以将自己从内存中删除。AddRef和Release可以增加和减少这一计数值。2.2.3 创建将组件分成多个接口只是将单模应用分个成多个部分的第一步,组件需要被放入动态链接库(DLL)中。DLL是一个组件服务程序,或者说是发行组件的一种方式。组件实际上应看成是在DLL中实现的接口集。在客户获取某个组件接口指针之前,它必须先将相应的DLL装载到其进程空间中,并创建此组件。由于客户组件所需要的所有函数都可以通过某个接口指针而访问到,因此,可以在DLL中引出CreatInstance函数就可以使用户调用它。之后,可以装载DLL并调用其中的函数。此功能可由COM库函数CoCreateInstance来实现。CoCreateInstance创建组件的过程是:传给它一个CLSID,然后它创建相应的组件,并返回指向所请求的接口的指针。但CoCreateInstance没有给客户提供一种能控制组件创建过程的方法,缺乏一定的灵活性。事实上,常用类厂来创建组件。类厂就是一个带有能够创建其他组件的接口的组件。客户先创建类厂本身,然后再用一个接口(如IClassFactory)来创建所需的组件。然后还要用DllRegisterSever在Windows中注册这个组件。2.2.4 复用COM组件可以被复用,它支持“接口继承”。这种继承指的是一个类继承其基类的类型或接口。抽象基类是一种最纯粹的接口继承,并且正好也被用来实现COM接口。在COM中,我们可以用包容和聚合来对组件进行改造。包容是在接口级完成的。外部组件包含指向内部接口的指针。此时,外部组件仅仅是内部组件的一个客户而已,它将使用内部组件的接口来实现它自己的接口。外部组件也可以通过将调用转发给内部组件的方法来重新实现内部组件所支持的某个接口。并且外部组件还可以在内部组件代码的前后加上一些代码以对接口进行改造。聚合是包含的一种变化形式。当外部组件聚合了某个内部组件的一个接口时,它并没有象包容那样重新实现此接口并显式的将调用请求转发给内部组件。相反,外部组件直接把内部组件的接口指针返回给客户。使用这种方法,外部组件将无需重新实现并转发接口中的所有函数了。包容和聚合为实现组件的复用提供了一种极具鲁棒性的机制。在组件构架下,客户于组件的实现完全隔离开了。2.3 插件简介插件是一类特殊的组件。它的目的不是为一般应用程序使用,而是专为特定的应用程序使用。插件一般在宿主应用程序上添加控制项,如菜单、工具按键等。插件响应宿主程序中对这些项目的操作,并对宿主程序中的数据进行特定操作。3 需求分析和方案设计3.1 需求分析 3.1.1功能需求用户在编辑完文档后可以选择把文档全部内容或部分内容加密生成密文,同样点击插件中的解密按纽可以把密文还原为明文。 系统功能流程图见图2:Y用户是否要求加密DES加密Word内容Word是否被DES加密DES解密Word内容保存Word内容NYN图2 系统功能流程图3.1.2 开发环境本插件在word2003下开发,可以在Windows2000/2003/xp等操作系统下运行。开发环境配置表,如表1:表1系统配置表PC硬件处理器:Intel PII 450 或更好内 存:256 M 或更大硬 盘:20 G 或更大软件Microsoft Windows NT Server 4.0 或更高版本Microsoft Office 20033.2 方案设计此功能的实现包括了DES算法的实现和插件的实现。可以用VB编写Word插件, VB以其开发的易学好用和强大的用户界面设计能力倍受程序员的青睐,是微软公司推出的开发Windows应用程序的主力平台之一。但其不能直接对寄存器进行操作,没有直接的输入输出端口操作语句,考虑到DES算法的效率与实现等问题,必须借助其他编程语言,而C/C+语言具备较高的运行效率,所以可以通过在VC环境下编写出高效的DES算法代码的动态链接库(DLL),然后在VB中调用。加密WordDES算法模块运行加密插件Word内容加密解密调用DES加密模块调用DES解密模块Word内容解密图3 系统设计流程图4 程序的实现4.1 VC建立DES算法模块新建Win32动态库工程,如下图所示:图4 建立Win32动态库工程4.1.1 加密导出函数的定义void _stdcall Encode(char *sInput, char *sOutput) /sInput输入字符串,sOutput输出字符串char buf1024; /定义1024字节的缓冲变量memset(buf, 0x00, sizeof(buf); /缓冲区清零Des_Go(buf, sInput, sizeof(sInput), key, sizeof(key), ENCRYPT); /加密函数strcpy(sOutput,buf);/将加密后的字符串输出4.1.2解密导出函数的定义void _stdcall Decode(char *sInput, char *sOutput) /sInput输入字符串,sOutput输出字符串char buf1024; /定义1024字节的缓冲变量memset(buf, 0x00, sizeof(buf); /缓冲区清零Des_Go(buf, sInput, sizeof(sInput), key, sizeof(key), DECRYPT); /解密函数strcpy(sOutput,buf); /将加密后的字符串输出4.1.3加解密相关函数的声名typedef bool (*PSubKey)1648;static void DES(char Out8, char In8, const PSubKey pSubKey, bool Type);/标准DES加/解密static void SetKey(const char* Key, int len);/ 设置密钥static void SetSubKey(PSubKey pSubKey, const char Key8);/设置子密钥static void F_func(bool In32, const bool Ki48);/ f 函数static void S_func(bool Out32, const bool In48);/ s 盒代替static void Transform(bool *Out, bool *In, const char *Table, int len);/ 变换static void Xor(bool *InA, const bool *InB, int len);/ 异或static void RotateL(bool *In, int len, int loop);/ 循环左移static void ByteToBit(bool *Out, const char *In, int bits);/字节组转换成位组static void BitToByte(char *Out, const bool *In, int bits);/位组转换成字节组static bool SubKey21648;/ 16圈子密钥static bool Is3DES;/ 3次DES标志static char Tmp256, deskey16;4.2 VB编写Word插件4.2.1建立Word插件工程(1)创建“外接程序”工程,如图5:图5 VB中新建工程图(2) 打开“设计器”中的Connect设计器。双击该Connect的图标,如图6:图6 工程项目图修改其中的工程名和应用程序。其中,“应用程序”选择该插件是针对哪个具体的应用程序的。这里选Word。(3)添加对Word类型库的引用,如图7图7 工程引用图系统缺省添加了对Office类型库的引用。但由于开发的是Word插件,因此需要存取Word中的对象。所有必须添加对Word的引用。(4)打开该设计器的代码窗口。设计器的代码就是插件接口方法的实现。1)删除系统缺省添加的代码。系统缺省添加的代码是针对VB插件的,而不是Word或其它应用程序插件的。因此删除它们。2)添加AddinInstance对象的OnConnection方法。AddinInstance就代表了该插件本身。(5) 调试设置该工程的属性,将“调试”中的启动程序设置为系统中安装的WinWord.exe。图8 工程属性图此后,可以设置断点,运行。采用标准VB中的调试方法调试程序。(6) 安装1)生成DLL后,自动在本机注册该插件。本机以后就可以使用了。2)在其它机器安装:将DLL拷贝到system32目录(其它目录也可以)运行:regsvr32 DLL文件全路径(SYSTEM32目录不用路径)3)删除运行:regsvr32 -u DLL文件全路径(SYSTEM32目录不用路径)4.2.2 Word代码的编写(1) API函数声明使用API文本浏览器贴入的WinAPI函数声明Private Declare Function OpenClipboard Lib user32 (ByVal hwnd As Long) As Long 声明打开剪贴板函数Private Declare Function CloseClipboard Lib user32 () As Long 声明关闭剪贴板函数Private Declare Function EmptyClipboard Lib user32 () As Long 声明清除剪贴板函数Private Declare Function SetClipboardData Lib user32 (ByVal wFormat As Long, ByVal hMem As Long) As Long 声明剪贴板赋值函数Private Declare Sub Encode Lib DLL (ByVal sInput As String, ByVal sOutput As String) 加密函数的声明Private Declare Sub Decode Lib DLL (ByVal sInput As String, ByVal sOutput As String) 解密函数的声明Private Const CF_BITMAP = 2Private mAppWord As Word.ApplicationPrivate mBar As Office.CommandBar使用WithEvents声明,可以定义mBtn1,mBtn2的事件响应程序Private WithEvents mBtn1 As Office.CommandBarButtonPrivate WithEvents mBtn2 As Office.CommandBarButton(2)添加工具栏加密解密按钮Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant) Set mAppWord = Application Set mBar = mAppWord.CommandBars.Add(My Toolbar for VB, , , True) Set mBtn1 = mBar.Controls.Add(Office.MsoControlType.msoControlButton)添加mBtn按钮的事件 Set mBtn2 = mBar.Controls.Add(Office.MsoControlType.msoControlButton)添加mBtn2按钮的事件 SetButtonStyle mBtn1, 203, 加密, Encode, msoButtonIconAndCaption 定义加密按钮 SetButtonStyle mBtn2, 203, 解密, Decode, msoButtonIconAndCaption 定义解密按钮End Sub(3)定义按钮风格Private Sub SetButtonStyle(btn As Office.CommandBarButton, idPic As Long, sCaption As String, sToolTip As String, btnStyle As MsoButtonStyle) 设置按键图标 这里需要使用WinAPI函数,见最上面的函数声明(使用开始菜单中”Microsoft Visual Basic API 文本浏览器”选择和粘贴 Dim bmp As IPictureDisp Set bmp = LoadResPicture(203, vbResBitmap) vb加载资源的方法 If Not bmp Is Nothing Then OpenClipboard 0 EmptyClipboard SetClipboardData CF_BITMAP, bmp.Handle CloseClipboard btn.PasteFace End If 设置按键文本 btn.Caption = sCaption 设置按键的ToolTip帮助信息 btn.ToolTipText = sToolTip 显示按键 btn.Visible = True 设置按键风格 btn.Style = btnStyle 设置按键为允许 btn.Enabled = TrueEnd Sub(4)加密按钮事件Private Sub mBtn1_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean) 操作Word对象Dim doc As Word.Document 取Word当前活动文档 Set doc = mAppWord.ActiveDocument Dim para As Word.Range Dim temp As String * 1024 分配1024个字节缓冲区 Set para = doc.Range Encode para.Text, temp 文档加密 para.Text = temp 设置该段的颜色 para.Font.Color = wdColorBlueEnd Sub(5)解密按钮事件Private Sub mBtn2_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean) 操作Word对象 Dim doc As Word.Document Set doc = mAppWord.ActiveDocument 取Word当前活动文档 Dim para As Word.Paragraph Dim temp As String * 1024 分配1024个字节缓冲区 Set para = doc.Paragraphs(1) Decode para.Range.Text, temp 文档解密 para.Range.Text = temp 设置该段的颜色 para.Range.Font.Color = wdColorBlue End Sub5 测试本毕业设计测试时遇到了很多问题,主要的问题在于缓冲区大小的控制问题,测试时,在Word文档中输入较长的文本内容后,再加密,会出现缓冲区溢出的错误,经过长时间查阅资料,此问题已解决,解决方法如下:在Word文档中点击加密或解密按钮的时间中,首先得到要加密的Word内容,然后计算此内容的字节大小,根据这个大小再分配缓冲区的实际大小。此问题解决。结 论本文介绍了一个Word加密插件的开发和设计。用户通过使用该插件,可以在Word中,就地对Word文档的部分或全部内容进行加密和解密。加密后Word内容显示DES的密文,对其解密时,需要使用相同的Word加密插件才能正确的进行解密,这样保证重要信息不被泄漏,增加了Word的安全性。本设计的重点是开发算法模块和Word插件。算法模块采用DES加密算法,在开发中采用DLL动态库技术实现。即将算法代码封装成一个DLL,由Word插件按需进行动态调用。此外,根据COM组件原理和Word插件的接口要求,我们开发了一个Word插件。该插件在Word中添加了一个工具栏,并在其上添加了两个按键,分别用于加密和解密。 尽管基本的加解密功能已经通过了测试,但由于时间的限制和在知识上的不足,该插件还有一些待改进的地方。如用户设置自己的密钥,操作界面的设计等。经过本设计的开发,我积累了不少程序开发的知识,为以后程序开发奠定了基础。参考文献1 徐景周(译),Office2000下内部COM插件的编程实现 M.北京:清华大学出版社,20022 曹天杰,张永平,苏成.计算机系统安全M.20033微软公司,VB部件工具 M .1997年4黄晓东,Visual C+6.0 Internet 开发指南. M.北京:清华大学出版社,20005 赵德奎,Visual C+6.0 开发与实例. M.北京:电子工业出版社,19996 冯延晖,刘晓铭,赵淦森,王泳. COM+编程M.2002年11月7 刘宗田等译.Bruce Eckel, Thinking in C+(C+ 编程思想)M.机械工业出版社,20008 罗朝盛.Visual Basic 6.0程序设计实践指导M. 浙江科学技术出版社,2002商业源代码,全套计算机毕业设计免费下载 更多全套设计联系QQ:1042897696最新设计大全 第 19 页 共 20 页
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!