基于DES加密算法的WORD加密插件的实现_第1页
基于DES加密算法的WORD加密插件的实现_第2页
基于DES加密算法的WORD加密插件的实现_第3页
基于DES加密算法的WORD加密插件的实现_第4页
基于DES加密算法的WORD加密插件的实现_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、基于基于 DES 加密算法的加密算法的 WORD 加密插件的实现加密插件的实现摘摘 要要随着社会发展,社会进入信息时代。信息技术和信息产业正在改变传统的生产经营和生活方式,信息已成为社会发展的重要战略资源。如今,Office办公文档已是日常办公生活中不可缺少的一部分,与此同时伴随而来的信息安全问题也日益突出。如何确保 Word 文档中的内容不被未授权的第三方所知,防止重要信息被随意改动,成为当务之急。如果在 Word 工具栏中添加一个加密插件,可以对文档全部内容或部分内容加密,便能有效防止信息泄漏。本论文采用VB编写Word插件,通过采用Windows下的动态链接库技术(DLL) ,在VC中把

2、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.

3、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商业源代码,全套计算机毕业设计免费下载 http:/更多全套设计联系 QQ:10

4、42897696最新设计大全 http:/ 1 页 共 20 页1 1 引言引言1.1 选题背景选题背景 DES 是 Data Encryption Standard(数据加密标准)的缩写。它是由 IBM公司研制的一种加密算法,美国国家标准局于 1977 年公布把它作为非机要部门使用的数据加密标准,二十多年来,它一直活跃在国际保密通信的舞台上,扮演了十分重要的角色。 DES 是一个分组加密算法,他以 64 位为分组对数据加密。同时 DES 也是一个对称算法:加密和解密用的是同一个算法。它的密匙长度是 56 位(因为每个第 8 位都用作奇偶校验),密匙可以是任意的 56 位的数,而且可以任意时候

5、改变。其中有极少量的数被认为是弱密匙,但是很容易避开他们。所以保密性依赖于密钥。按照组件化的程序设计的思想,复杂的应用程序被设计成一些小的,功能单一的组件模块,这些组件模块可以运行在同一台机器上,也可以运行在不同的机器上。为了实现这样的应用软件,组件程序和组件程序之间需要一些极为细致的规范,只有组件程序遵守了这些共同的规范,然间系统才能正常运行。为此,OMG 和 Microsoft 分别提出了 CORBA(Common Object Request Breaker Architecture)和 COM(Component Object model)标准,目前 CORBA模型主要应用于 UNIX

6、 操作系统平台上,而 COM 则主要应用于 Microsoft Windows 操作系统平台上。 在 COM 标准中,一个组件程序也被称为一个模块,它可以是一个动态连接库(DLL), 被称为进程内组件(in-of-process component) ,也可以是一个可执行程序(EXE) ,被称为进程外组件(out-of-process component) 。COM 对象是建立在二进制可执行代码级的基础上,而 C+等语言中的对象是建立在源代码级基础上的,因此 COM 对象是语言无关的。这一特性使用不同编程语言开发的组件对象进行交互成为可能。在 Microsoft Windows 系统平台上,C

7、OM 技术被应用于系统的各个层次,从底层的 COM 对象管理到上层的应用程序交互都用到了 COM 标准。1.2 选题意义选题意义Word 是当今非常流行的一款字处理软件,是装机的必备程序。但随之而来的信息安全问题也收到普遍关注。为了防止信息财产被故意或偶然地非授权泄漏,保护用户的利益和隐私,有必要对文档进行加密。目前 Word 文档可以通过设置密码来决定用户是否有打开文档的权限,从而保护文档信息安全。这样是对整个文件的操作,并且必须要有密码配合。我们可以通过一个插件对文档第 2 页 共 20 页内容加解密,这样使用起来更加简单方便。2 2 理论基础理论基础2.1 DES 算法描述算法描述2.1

8、.1 DESDES 算法框图算法框图DES 对 64(bit)位的明文分组 M 进行操作,M 经过一个初始置换 IP 置换成 m0,将 m0 明文分成左半部分和右半部分 m0=(L0,R0),各 32 位长。然后进行 16 轮完全相同的运算,这些运算被称为函数 f,在运算过程中数据与密匙结合。经过 16 轮后,左,右半部分合在一起经过一个末置换。 在每一轮中,密匙位移位,然后再从密匙的 56 位中选出 48 位。通过一个扩展置换将数据的右半部分扩展成 48 位,并通过一个异或操作替代成新的 32位数据,在将其置换换一次。这四步运算构成了函数 f。然后,通过另一个异或运算,函数 f 的输出与左半

9、部分结合,其结果成为新的右半部分,原来的右半部分成为新的左半部分。将该操作重复 16 次,就实现了。具体如图 1 所示:商业源代码,全套计算机毕业设计免费下载 http:/更多全套设计联系 QQ:1042897696最新设计大全 http:/ 1 DES 算法框图2.1.2 DES 解密解密 加密和解密使用相同的算法。 DES 加密和解密唯一的不同是密匙的次序相反。如果各轮加密密匙分别是K1,K2,K3.K16 那么解密密匙就是 K16,K15,K14K1。2.1.3 DES 算法原理算法原理(1)处理密钥:从用户处获得 64 位密钥.(每第 8 位为校验位,为使密钥有正确的奇偶校验,每个密钥

10、要有奇数个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第 3 页 共 20 页把变换后的密钥等分成两部分,前 28 位记为 C0,后 28 位记为 D0.计算子密钥(共 16 个) , 从 i=1 开始。分别

11、对 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

12、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。用

13、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第 4 页 共 20 页位为 B8。用 S 密箱里的值替换 Bj。从 j=1 开始。S 密箱里的值为 4 位数,共 8 个 S密箱.取出

14、 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顺

15、序串联起来得到一个 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 31第 5 页 共 20 页10 16 25 32把得到的结果与 Li-1作异或运算。把计算结果賦给 Ri。把 Ri-1的值賦给 Li。从 a 循环执行,直到 K16也被用到。把 R16和 L16

16、 顺序串联起来得到一个 64 位数。对这个数实施 II 变换的逆变换。以上就是 DES 算法如何加密一段 64 位数据块。解密时用同样的过程,只需把 16 个子密钥的顺序颠倒过来,应用的顺序为 K16,K15,K14,.K1。 2.2 COM 组件简介组件简介2.2.1 组件组件COM,是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在 COM 构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一

17、个组件;可以方便的将应用系统扩展到网络环境下;COM 与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块;等等。 COM 是开发软件组件的一种方法。组件实际上是一些小的二进制可执行程序,它们可以给应用程序,操作系统以及其他组件提供服务。开发自定义的COM 组件就如同开发动态的,面向对象的 API。多个 COM 对象可以连接起来形成应用程序或组件系统。并且组件可以在运行时刻,在不被重新链接或编译应用程序的情况下被卸下或替换掉。Microsoft 的许多技术,如 ActiveX, DirectX以及 OLE 等都是基于 COM 而建立起来的。并且 Microsoft 的开

18、发人员也大量使用 COM 组件来定制他们的应用程序及操作系统。COM 所含的概念并不止是在 Microsoft Windows 操作系统下才有效。COM并不是一个大的 API,它实际上象结构化编程及面向对象编程方法那样,也是一种编程方法。在任何一种操作系统中,开发人员均可以遵循“COM 方法” 。一个应用程序通常使由单个的二进制文件组成的。当编译器生成应用程序之后,在对下一个版本重新编译并发行新生成的版本之前,应用程序一般不会发生任何变化。操作系统,硬件及客户需求的改变都必须等到整个应用程序被重新生成。目前这种状况已经发生变化。开发人员开始将单个的应用程序分隔成单独第 6 页 共 20 页多个

19、独立的部分,也既组件。这种做法的好处是可以随着技术的不断发展而用新的组件取代以有的组件。此时的应用程序可以随新组件不断取代旧的组件而渐趋完善。而且利用已有的组件,用户还可以快速的建立全新的应用。传统的做法是将应用程序分割成文件,模块或类,然后将它们编译并链接成一个单模应用程序。它与组件建立应用程序的过程(称为组件构架)有很大的不同。一个组件同一个微型应用程序类似,即都是已经编译链接好并可以使用的二进制代码,应用程序就是由多个这样的组件打包而得到的。单模应用程序只有一个二进制代码模块。自定义组件可以在运行时刻同其他的组件连接起来以构成某个应用程序。在需要对应用程序进行修改或改进时,只需要将构成此

20、应用程序的组件中的某个用新的版本替换掉即可。COM,即组件对象模型,是关于如何建立组件以及如何通过组件建立应用程序的一个规范,说明了如何可动态交替更新组件。2.2.2 接口接口对于 COM 来讲,接口是一个包含一个函数指针数组的内存结构。每一个数组元素包含的是一个由组件所实现的函数地址。对于 COM 而言,接口就是此内存结构,其他东西;均是 COM 不关心的实现细节。在 C+中,可以用抽象基类来实现 COM 接口。由于一个 COM 组件可以实现支持任意数目的接口,因此对于这样的组件,可以用抽象基类的多重继承来实现。用类来实现组件将比其他方法更为容易。对于客户来说,一个组件就是一个接口集。客户只

21、能通过接口才能和 COM组件打交道。从整体上讲,客户对于一个组件可以说是知之甚少的。通常情况下,客户甚至不必知道一个组件所提供的所有接口。客户同组件的交互是通过接口完成的。在客户查询组件其他的接口时,也是通过接口完成的。这个接口就是 IUnknown。Iunknown 接口的定义包含在Win32 SDK 中的 UNKNOWN.H 的头文件中,引用如下:interface IUnknownvirtual HRESULT-_ _stdcall QueryInterface(const IID& iid,void *ppv)=0;virtual ULONG_ _stdcall AddRef(

22、)=0;virtual ULONG_ _Release()=0;所有的 COM 都要继承 IUnknown。可以用 Iunknown 的接口指针来查询该组件的其他的接口,并且每个接口的 vtbl 中的前三个函数都是QueryInterface,AddRef 和 Release。这使得所有的 COM 接口都可以被当作成第 7 页 共 20 页IUnknown 接口来处理。由于所有的接口都支持 QueryInterface,因此组件的任何一个接口都可以被客户用来获取它所支持的其他接口。在用 QueryInterface 将组件抽象成由多个相互独立的接口构成的集合后,还需要管理组件的生命期。这一点是

23、通过对接口的引用计数实现的。客户并不能直接控制组件的生命期。当使用完一个接口而要用组件的另一个接口时,是不能将改组件释放的。对组件的释放可以由组件在客户使用完所有的组件之后自己完成。IUnknown 的另外两个成员函数 AddRef 和 Release 的作用就是给客户提供一种让它指示何时处理完一个接口的手段。AddRef 和 Release 实现的是一种名为引用技术的内存管理技术。当客户从组件获得一个接口时,此引用计数值将增 1。当客户使用完某个接口时,组件的引用计数值将减 1,当引用计数值为 0 时,组件可以将自己从内存中删除。AddRef 和 Release 可以增加和减少这一计数值。2

24、.2.3 创建创建将组件分成多个接口只是将单模应用分个成多个部分的第一步,组件需要被放入动态链接库(DLL)中。DLL 是一个组件服务程序,或者说是发行组件的一种方式。组件实际上应看成是在 DLL 中实现的接口集。在客户获取某个组件接口指针之前,它必须先将相应的 DLL 装载到其进程空间中,并创建此组件。由于客户组件所需要的所有函数都可以通过某个接口指针而访问到,因此,可以在 DLL 中引出 CreatInstance 函数就可以使用户调用它。之后,可以装载DLL 并调用其中的函数。此功能可由 COM 库函数 CoCreateInstance 来实现。CoCreateInstance 创建组件

25、的过程是:传给它一个 CLSID,然后它创建相应的组件,并返回指向所请求的接口的指针。但 CoCreateInstance 没有给客户提供一种能控制组件创建过程的方法,缺乏一定的灵活性。事实上,常用类厂来创建组件。类厂就是一个带有能够创建其他组件的接口的组件。客户先创建类厂本身,然后再用一个接口(如 IClassFactory)来创建所需的组件。然后还要用DllRegisterSever 在 Windows 中注册这个组件。2.2.4 复用复用COM 组件可以被复用,它支持“接口继承” 。这种继承指的是一个类继承其基类的类型或接口。抽象基类是一种最纯粹的接口继承,并且正好也被用来实现 COM

26、接口。在 COM 中,我们可以用包容和聚合来对组件进行改造。包容是在接口级完成的。外部组件包含指向内部接口的指针。此时,外部组件仅仅是内部组件的一个客户而已,它将使用内部组件的接口来实现它自己第 8 页 共 20 页的接口。外部组件也可以通过将调用转发给内部组件的方法来重新实现内部组件所支持的某个接口。并且外部组件还可以在内部组件代码的前后加上一些代码以对接口进行改造。聚合是包含的一种变化形式。当外部组件聚合了某个内部组件的一个接口时,它并没有象包容那样重新实现此接口并显式的将调用请求转发给内部组件。相反,外部组件直接把内部组件的接口指针返回给客户。使用这种方法,外部组件将无需重新实现并转发接

27、口中的所有函数了。包容和聚合为实现组件的复用提供了一种极具鲁棒性的机制。在组件构架下,客户于组件的实现完全隔离开了。2.3 插件简介插件简介插件是一类特殊的组件。它的目的不是为一般应用程序使用,而是专为特定的应用程序使用。插件一般在宿主应用程序上添加控制项,如菜单、工具按键等。插件响应宿主程序中对这些项目的操作,并对宿主程序中的数据进行特定操作。3 3 需求分析和方案设计需求分析和方案设计3.1 需求分析需求分析 3.1.1 功能需求功能需求用户在编辑完文档后可以选择把文档全部内容或部分内容加密生成密文,同样点击插件中的解密按纽可以把密文还原为明文。 系统功能流程图见图 2:第 9 页 共 2

28、0 页Y用户是否要求加密DES 加密 Word 内容Word 是否被 DES 加密DES 解密 Word 内容保存 Word 内容NYN图 2 系统功能流程图3.1.2 开发环境开发环境本插件在 word2003 下开发,可以在Windows2000/2003/xp 等操作系统下运行。开发环境配置表,如表 1:表 1 系统配置表硬件处理器:Intel PII 450 或更好内 存:256 M 或更大硬 盘:20 G 或更大PC软件Microsoft Windows NT Server 4.0 或更高版本Microsoft Office 20033.2 方案设计方案设计此功能的实现包括了 DES

29、 算法的实现和插件的实现。可以用 VB 编写Word 插件, VB 以其开发的易学好用和强大的用户界面设计能力倍受程序员的青睐,是微软公司推出的开发 Windows 应用程序的主力平台之一。但其不能直接对寄存器进行操作,没有直接的输入输出端口操作语句,考虑到 DES 算法的效率与实现等问题,必须借助其他编程语言,而 C/C+语言具备较高的运行效率,所以可以通过在 VC 环境下编写出高效的 DES 算法代码的动态链接库(DLL) ,然后在 VB 中调用。第 10 页 共 20 页加密WordDES 算法模块运行加密插件Word 内容加密解密调用 DES加密模块调用 DES解密模块Word 内容解

30、密图 3 系统设计流程图4 4 程序的实现程序的实现4.1 VC 建立建立 DES 算法模块算法模块新建 Win32 动态库工程,如下图所示:图 4 建立 Win32 动态库工程4.1.1 加密导出函数的定义加密导出函数的定义void _stdcall Encode(char *sInput, char *sOutput) /sInput 输入字符串,sOutput 输出字第 11 页 共 20 页符串char buf1024; /定义 1024 字节的缓冲变量memset(buf, 0 x00, sizeof(buf) ); /缓冲区清零Des_Go(buf, sInput, sizeof(

31、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, 0 x00, sizeof(buf) ); /缓冲区清零Des_Go(buf, sInput, sizeof(sInput), key, sizeof(key), DE

32、CRYPT); /解密函数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);/设置子密钥stati

33、c 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 voi

34、d 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:第 12 页 共 20 页图 5

35、VB 中新建工程图(2) 打开“设计器”中的 Connect 设计器。双击该 Connect 的图标,如图 6:图 6 工程项目图修改其中的工程名和应用程序。其中,“应用程序”选择该插件是针对哪个具体的应用程序的。这里选Word。(3)添加对 Word 类型库的引用,如图 7第 13 页 共 20 页图 7 工程引用图系统缺省添加了对Office类型库的引用。但由于开发的是Word插件,因此需要存取Word中的对象。所有必须添加对Word的引用。(4)打开该设计器的代码窗口。设计器的代码就是插件接口方法的实现。1)删除系统缺省添加的代码。系统缺省添加的代码是针对VB插件的,而不是Word或其它

36、应用程序插件的。因此删除它们。2)添加AddinInstance对象的OnConnection方法。AddinInstance就代表了该插件本身。(5) 调试设置该工程的属性,将“调试”中的启动程序设置为系统中安装的WinWord.exe。图8 工程属性图此后,可以设置断点,运行。采用标准VB中的调试方法调试程序。(6) 安装1)生成DLL后,自动在本机注册该插件。本机以后就可以使用了。2)在其它机器安装:将DLL拷贝到system32目录(其它目录也可以)运行:regsvr32 DLL文件全路径(SYSTEM32目录不用路径)3)删除运行:regsvr32 -u DLL文件全路径(SYSTE

37、M32目录不用路径)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 声明关闭剪贴板函数第 14 页 共 20 页Private Declare Function EmptyClipboard Lib user32 () As L

38、ong 声明清除剪贴板函数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 Stri

39、ng) 解密函数的声明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_OnConnecti

40、on(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)

41、 添加 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.Comman

42、dBarButton, 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 Emp

43、tyClipboard SetClipboardData CF_BITMAP, bmp.Handle CloseClipboard btn.PasteFace End If 设置按键文本 btn.Caption = sCaption第 15 页 共 20 页 设置按键的 ToolTip 帮助信息 btn.ToolTipText = sToolTip 显示按键 btn.Visible = True 设置按键风格 btn.Style = btnStyle 设置按键为允许 btn.Enabled = TrueEnd Sub(4)加密按钮事件Private Sub mBtn1_Click(ByVal

44、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)解密

温馨提示

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

评论

0/150

提交评论