基于DES加密算法的WORD加密插件的实现论文.docx

上传人:b****3 文档编号:5484068 上传时间:2023-05-08 格式:DOCX 页数:26 大小:134.10KB
下载 相关 举报
基于DES加密算法的WORD加密插件的实现论文.docx_第1页
第1页 / 共26页
基于DES加密算法的WORD加密插件的实现论文.docx_第2页
第2页 / 共26页
基于DES加密算法的WORD加密插件的实现论文.docx_第3页
第3页 / 共26页
基于DES加密算法的WORD加密插件的实现论文.docx_第4页
第4页 / 共26页
基于DES加密算法的WORD加密插件的实现论文.docx_第5页
第5页 / 共26页
基于DES加密算法的WORD加密插件的实现论文.docx_第6页
第6页 / 共26页
基于DES加密算法的WORD加密插件的实现论文.docx_第7页
第7页 / 共26页
基于DES加密算法的WORD加密插件的实现论文.docx_第8页
第8页 / 共26页
基于DES加密算法的WORD加密插件的实现论文.docx_第9页
第9页 / 共26页
基于DES加密算法的WORD加密插件的实现论文.docx_第10页
第10页 / 共26页
基于DES加密算法的WORD加密插件的实现论文.docx_第11页
第11页 / 共26页
基于DES加密算法的WORD加密插件的实现论文.docx_第12页
第12页 / 共26页
基于DES加密算法的WORD加密插件的实现论文.docx_第13页
第13页 / 共26页
基于DES加密算法的WORD加密插件的实现论文.docx_第14页
第14页 / 共26页
基于DES加密算法的WORD加密插件的实现论文.docx_第15页
第15页 / 共26页
基于DES加密算法的WORD加密插件的实现论文.docx_第16页
第16页 / 共26页
基于DES加密算法的WORD加密插件的实现论文.docx_第17页
第17页 / 共26页
基于DES加密算法的WORD加密插件的实现论文.docx_第18页
第18页 / 共26页
基于DES加密算法的WORD加密插件的实现论文.docx_第19页
第19页 / 共26页
基于DES加密算法的WORD加密插件的实现论文.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于DES加密算法的WORD加密插件的实现论文.docx

《基于DES加密算法的WORD加密插件的实现论文.docx》由会员分享,可在线阅读,更多相关《基于DES加密算法的WORD加密插件的实现论文.docx(26页珍藏版)》请在冰点文库上搜索。

基于DES加密算法的WORD加密插件的实现论文.docx

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

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

摘要

随着社会发展,社会进入信息时代。

信息技术和信息产业正在改变传统的生产﹑经营和生活方式,信息已成为社会发展的重要战略资源。

如今,Office办公文档已是日常办公生活中不可缺少的一部分,与此同时伴随而来的信息安全问题也日益突出。

如何确保Word文档中的内容不被未授权的第三方所知,防止重要信息被随意改动,成为当务之急。

如果在Word工具栏中添加一个加密插件,可以对文档全部内容或部分内容加密,便能有效防止信息泄漏。

本论文采用VB编写Word插件,通过采用Windows下的动态链接库技术(DLL),在VC中把DES算法封装起来做成DLL模块供VB调用,实现了开发加密插件时对加密函数的调用,提高了加密算法的效率。

通过使用该插件在Word中添加的工具按键,便能简单有效地对文档内容加解密,使用户在操作WORD文档时更加方便安全。

关键词:

加密插件;信息安全;COM组件;动态链接库

TheImplementationofaWordAddingforEncryptionBasedonDESEncryptionAlgorithm

Abstract

Withthedevelopmentofthesociety,weareenteringtheinformationtimes.Thetraditionalmethodoftheproduct,themanagementandourlifestylearechangedbytheinformationtechnologyandtheinformationindustries.Theinformationhasbecometheimportantstrategicresourcesforthesocietydevelopment.Now,theOfficedocumentshavealreadybecomeanessentialpartinpeople’sdailywork,followedwiththis,thequestionofinformationsecuritybecomescriticaldaybydayatthesametime.HowtopreventthecontentintheWorddocumentsfrombeingknownormodifiedbytheunauthorizedthirdpartyhasbecomeanurgentissue.Ifwecanaddanencryptionplug-inintothewordtoolbar,whichisabletoencryptallorpartoftheWorddocument,theinformationleakingcouldbepreventedefficiently.

TheWordaddingintroducedinthispaperisdevelopedwithVB,whichcallstheencryptionanddecryptionfunctionsinaDynamicLinkLibrary(DLL)thatisdevelopedwithVCtoenhancetheefficiencyoftheencryptionalgorithm.Byusingthisadding,userscanencryptordecryptworddocumentlocallywithoutleavingtheWord.

Keywords:

Encryptionplug-inunit;Informationsecurity;COMmodule;DLL

目录

论文总页数:

20页

1引言1

1.1选题背景1

1.2选题意义1

2理论基础2

2.1DES算法描述2

2.1.1DES算法框图2

2.1.2DES解密3

2.1.3DES算法原理3

2.2COM组件简介5

2.2.1组件5

2.2.2接口6

2.2.3创建7

2.2.4复用8

2.3插件简介8

3需求分析和方案设计8

3.1需求分析8

3.1.1功能需求8

3.1.2开发环境9

3.2方案设计10

4程序的实现10

4.1VC建立DES算法模块10

4.1.1加密导出函数的定义11

4.1.2解密导出函数的定义11

4.1.3加解密相关函数的声名11

4.2VB编写WORD插件12

4.2.1建立Word插件工程12

4.2.2Word代码的编写14

5测试16

结论17

参考文献18

致谢19

声明20

1引言

1.1选题背景

DES是DataEncryptionStandard(数据加密标准)的缩写。

它是由IBM公司研制的一种加密算法,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准,二十多年来,它一直活跃在国际保密通信的舞台上,扮演了十分重要的角色。

  DES是一个分组加密算法,他以64位为分组对数据加密。

同时DES也是一个对称算法:

加密和解密用的是同一个算法。

它的密匙长度是56位(因为每个第8位都用作奇偶校验),密匙可以是任意的56位的数,而且可以任意时候改变。

其中有极少量的数被认为是弱密匙,但是很容易避开他们。

所以保密性依赖于密钥。

按照组件化的程序设计的思想,复杂的应用程序被设计成一些小的,功能单一的组件模块,这些组件模块可以运行在同一台机器上,也可以运行在不同的机器上。

为了实现这样的应用软件,组件程序和组件程序之间需要一些极为细致的规范,只有组件程序遵守了这些共同的规范,然间系统才能正常运行。

为此,OMG和Microsoft分别提出了CORBA(CommonObjectRequestBreakerArchitecture)和COM(ComponentObjectmodel)标准,目前CORBA模型主要应用于UNIX操作系统平台上,而COM则主要应用于MicrosoftWindows操作系统平台上。

在COM标准中,一个组件程序也被称为一个模块,它可以是一个动态连接库(DLL),被称为进程内组件(in-of-processcomponent),也可以是一个可执行程序(EXE),被称为进程外组件(out-of-processcomponent)。

COM对象是建立在二进制可执行代码级的基础上,而C++等语言中的对象是建立在源代码级基础上的,因此COM对象是语言无关的。

这一特性使用不同编程语言开发的组件对象进行交互成为可能。

在MicrosoftWindows系统平台上,COM技术被应用于系统的各个层次,从底层的COM对象管理到上层的应用程序交互都用到了COM标准。

1.2选题意义

Word是当今非常流行的一款字处理软件,是装机的必备程序。

但随之而来的信息安全问题也收到普遍关注。

为了防止信息财产被故意或偶然地非授权泄漏,保护用户的利益和隐私,有必要对文档进行加密。

目前Word文档可以通过设置密码来决定用户是否有打开文档的权限,从而保护文档信息安全。

这样是对整个文件的操作,并且必须要有密码配合。

我们可以通过一个插件对文档内容加解密,这样使用起来更加简单方便。

2理论基础

2.1DES算法描述

2.1.1DES算法框图

DES对64(bit)位的明文分组M进行操作,M经过一个初始置换IP置换成m0,将m0明文分成左半部分和右半部分m0=(L0,R0),各32位长。

然后进行16轮完全相同的运算,这些运算被称为函数f,在运算过程中数据与密匙结合。

经过16轮后,左,右半部分合在一起经过一个末置换。

  在每一轮中,密匙位移位,然后再从密匙的56位中选出48位。

通过一个扩展置换将数据的右半部分扩展成48位,并通过一个异或操作替代成新的32位数据,在将其置换换一次。

这四步运算构成了函数f。

然后,通过另一个异或运算,函数f的输出与左半部分结合,其结果成为新的右半部分,原来的右半部分成为新的左半部分。

将该操作重复16次,就实现了。

具体如图1所示:

图1DES算法框图

2.1.2DES解密

加密和解密使用相同的算法。

DES加密和解密唯一的不同是密匙的次序相反。

如果各轮加密密匙分别是K1,K2,K3….K16那么解密密匙就是K16,K15,K14…K1。

2.1.3DES算法原理

(1)处理密钥:

从用户处获得64位密钥.(每第8位为校验位,为使密钥有正确的奇偶校验,每个密钥要有奇数个"1"位.(本文如未特指,均指二进制位)

(2)具体过程:

对密钥实施变换,使得变换以后的密钥的各个位与原密钥位对应关系如下表所示:

57494133251791585042342618

10259514335271911360524436

635547393123157625449383022

1466153453729211352820124

把变换后的密钥等分成两部分,前28位记为C[0],后28位记为D[0].

计算子密钥(共16个),从i=1开始。

分别对C[i-1],D[i-1]作循环左移来生成C[i],D[i].(共16次)。

每次循环左移位数如下表所示:

轮12345678910111213141516

位数1122222212222221

串联C[i],D[i],得到一个56位数,然后对此数

作如下变换以产生48位子密钥K[i]。

变换过程如下:

14171124153281562110

23191242681672720132

415231374755304051453348

444939563453464250362932

按以上方法计算出16个子密钥。

对64位数据块的处理:

把数据分成64位的数据块,不够64位的以适当的方式填补。

对数据块作变换。

585042342618102605244362820124

625446383022146645648403224168

57494133251791595143352719113

615345372921135635547393123157

将变换后的数据块等分成前后两部分,前32位记为L[0],后32位记为R[0]。

用16个子密钥对数据加密。

根据下面的扩冲函数E,扩展32位的成48位

3212345456789

8910111213121314151617

161718192021202122232425

24252627282928293031321

用E{R[i-1]}与K[i]作异或运算。

把所得的48位数分成8个6位数。

1-6位为B[1],7-12位为B[2],...43-48位为B[8]。

用S密箱里的值替换B[j]。

从j=1开始。

S密箱里的值为4位数,共8个S密箱.

取出B[j]的第1和第6位串联起来成一个2位数,记为m.m即是S密箱里用来替换B[j]的数所在的列数。

取出B[j]的第2至第5位串联起来成一个4位数,记为n。

n即是S密箱里用来替换B[j]的数所在的行数。

用S密箱里的值S[j][m][n]替换B[j]。

8个S密箱如下所示:

S-BOXE:

S1

Binaryd1d6=>;00011011

\/d2..d5\/Dec0123

………..

11001250153

11011301435

11101412956

11111572811

返回第一步直至8个数据块都被替换。

把B[1]至B[8]顺序串联起来得到一个32位数。

对这个数做如下变换:

bitgoestobitbitgoestobit

161217

72818

2032419

2141420

2953221

1262722

287323

178924

191925

15101326

23113027

2612628

5132229

18141130

3115431

10162532

把得到的结果与L[i-1]作异或运算。

把计算结果賦给R[i]。

把R[i-1]的值賦给L[i]。

从a循环执行,直到K[16]也被用到。

把R[16]和L[16]顺序串联起来得到一个64位数。

对这个数实施II变换的逆变换。

以上就是DES算法如何加密一段64位数据块。

解密时用同样的过程,只需把16个子密钥的顺序颠倒过来,应用的顺序为K[16],K[15],K[14],...K[1]。

2.2COM组件简介

2.2.1组件

COM,是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。

在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。

由此带来的好处是多方面的:

可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块;等等。

COM是开发软件组件的一种方法。

组件实际上是一些小的二进制可执行程序,它们可以给应用程序,操作系统以及其他组件提供服务。

开发自定义的COM组件就如同开发动态的,面向对象的API。

多个COM对象可以连接起来形成应用程序或组件系统。

并且组件可以在运行时刻,在不被重新链接或编译应用程序的情况下被卸下或替换掉。

Microsoft的许多技术,如ActiveX,DirectX以及OLE等都是基于COM而建立起来的。

并且Microsoft的开发人员也大量使用COM组件来定制他们的应用程序及操作系统。

COM所含的概念并不止是在MicrosoftWindows操作系统下才有效。

COM并不是一个大的API,它实际上象结构化编程及面向对象编程方法那样,也是一种编程方法。

在任何一种操作系统中,开发人员均可以遵循“COM方法”。

一个应用程序通常使由单个的二进制文件组成的。

当编译器生成应用程序之后,在对下一个版本重新编译并发行新生成的版本之前,应用程序一般不会发生任何变化。

操作系统,硬件及客户需求的改变都必须等到整个应用程序被重新生成。

目前这种状况已经发生变化。

开发人员开始将单个的应用程序分隔成单独多个独立的部分,也既组件。

这种做法的好处是可以随着技术的不断发展而用新的组件取代以有的组件。

此时的应用程序可以随新组件不断取代旧的组件而渐趋完善。

而且利用已有的组件,用户还可以快速的建立全新的应用。

传统的做法是将应用程序分割成文件,模块或类,然后将它们编译并链接成一个单模应用程序。

它与组件建立应用程序的过程(称为组件构架)有很大的不同。

一个组件同一个微型应用程序类似,即都是已经编译链接好并可以使用的二进制代码,应用程序就是由多个这样的组件打包而得到的。

单模应用程序只有一个二进制代码模块。

自定义组件可以在运行时刻同其他的组件连接起来以构成某个应用程序。

在需要对应用程序进行修改或改进时,只需要将构成此应用程序的组件中的某个用新的版本替换掉即可。

COM,即组件对象模型,是关于如何建立组件以及如何通过组件建立应用程序的一个规范,说明了如何可动态交替更新组件。

2.2.2接口

对于COM来讲,接口是一个包含一个函数指针数组的内存结构。

每一个数组元素包含的是一个由组件所实现的函数地址。

对于COM而言,接口就是此内存结构,其他东西;均是COM不关心的实现细节。

在C++中,可以用抽象基类来实现COM接口。

由于一个COM组件可以实现支持任意数目的接口,因此对于这样的组件,可以用抽象基类的多重继承来实现。

用类来实现组件将比其他方法更为容易。

对于客户来说,一个组件就是一个接口集。

客户只能通过接口才能和COM组件打交道。

从整体上讲,客户对于一个组件可以说是知之甚少的。

通常情况下,客户甚至不必知道一个组件所提供的所有接口。

客户同组件的交互是通过接口完成的。

在客户查询组件其他的接口时,也是通过接口完成的。

这个接口就是IUnknown。

Iunknown接口的定义包含在Win32SDK中的UNKNOWN.H的头文件中,引用如下:

interfaceIUnknown

{

virtualHRESULT-__stdcallQueryInterface(constIID&iid,void**ppv)=0;

virtualULONG__stdcallAddRef()=0;

virtualULONG__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:

 

图2系统功能流程图

3.1.2开发环境

本插件在word2003下开发,可以在Windows2000/2003/xp等操作系统下运行。

开发环境配置表,如表1:

表1系统配置表

PC

硬件

处理器:

IntelPII450或更好

内存:

256M或更大

硬盘:

20G或更大

软件

MicrosoftWindowsNTServer4.0或更高版本

MicrosoftOffice2003

3.2方案设计

此功能的实现包括了DES算法的实现和插件的实现。

可以用VB编写Word插件,VB以其开发的易学好用和强大的用户界面设计能力倍受程序员的青睐,是微软公司推出的开发Windows应用程序的主力平台之一。

但其不能直接对寄存器进行操作,没有直接的输入输出端口操作语句,考虑到DES算法的效率与实现等问题,必须借助其他编程语言,而C/C++语言具备较高的运行效率,所以可以通过在VC环境下编写出高效的DES算法代码的动态链接库(DLL),然后在VB中调用。

 

图3系统设计流程图

4程序的实现

4.1VC建立DES算法模块

新建Win32动态库工程,如下图所示:

图4建立Win32动态库工程

4.1.1加密导出函数的定义

void__stdcallEncode(char*sInput,char*sOutput)//sInput输入字符串,sOutput输出字符串

{

charbuf[1024];//定义1024字节的缓冲变量

memset(buf,0x00,sizeof(buf));//缓冲区清零

Des_Go(buf,sInput,sizeof(sInput),key,sizeof(k

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2