




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于des加密算法的word加密插件的實(shí)現(xiàn)摘 要隨著社會(huì)發(fā)展,社會(huì)進(jìn)入信息時(shí)代。信息技術(shù)和信息產(chǎn)業(yè)正在改變傳統(tǒng)的生產(chǎn)經(jīng)營(yíng)和生活方式,信息已成為社會(huì)發(fā)展的重要戰(zhàn)略資源。如今,office辦公文檔已是日常辦公生活中不可缺少的一部分,與此同時(shí)伴隨而來(lái)的信息安全問(wèn)題也日益突出。如何確保word文檔中的內(nèi)容不被未授權(quán)的第三方所知,防止重要信息被隨意改動(dòng),成為當(dāng)務(wù)之急。如果在word工具欄中添加一個(gè)加密插件,可以對(duì)文檔全部?jī)?nèi)容或部分內(nèi)容加密,便能有效防止信息泄漏。本論文采用vb編寫(xiě)word插件,通過(guò)采用windows下的動(dòng)態(tài)鏈接庫(kù)技術(shù)(dll),在vc中把des算法封裝起來(lái)做成dll模塊供vb調(diào)用,實(shí)現(xiàn)了
2、開(kāi)發(fā)加密插件時(shí)對(duì)加密函數(shù)的調(diào)用,提高了加密算法的效率。通過(guò)使用該插件在word中添加的工具按鍵,便能簡(jiǎn)單有效地對(duì)文檔內(nèi)容加解密,使用戶(hù)在操作word文檔時(shí)更加方便安全。關(guān)鍵詞:加密插件;信息安全;com組件;動(dòng)態(tài)鏈接庫(kù)目 錄論文總頁(yè)數(shù):20頁(yè) 引言1.1選題背景 des是data encryption standard(數(shù)據(jù)加密標(biāo)準(zhǔn))的縮寫(xiě)。它是由ibm公司研制的一種加密算法,美國(guó)國(guó)家標(biāo)準(zhǔn)局于1977年公布把它作為非機(jī)要部門(mén)使用的數(shù)據(jù)加密標(biāo)準(zhǔn),二十多年來(lái),它一直活躍在國(guó)際保密通信的舞臺(tái)上,扮演了十分重要的角色。 des是一個(gè)分組加密算法,他以64位為分組對(duì)數(shù)據(jù)加密。同時(shí)des也是一個(gè)對(duì)稱(chēng)算法:
3、加密和解密用的是同一個(gè)算法。它的密匙長(zhǎng)度是56位(因?yàn)槊總€(gè)第8 位都用作奇偶校驗(yàn)),密匙可以是任意的56位的數(shù),而且可以任意時(shí)候改變。其中有極少量的數(shù)被認(rèn)為是弱密匙,但是很容易避開(kāi)他們。所以保密性依賴(lài)于密鑰。按照組件化的程序設(shè)計(jì)的思想,復(fù)雜的應(yīng)用程序被設(shè)計(jì)成一些小的,功能單一的組件模塊,這些組件模塊可以運(yùn)行在同一臺(tái)機(jī)器上,也可以運(yùn)行在不同的機(jī)器上。為了實(shí)現(xiàn)這樣的應(yīng)用軟件,組件程序和組件程序之間需要一些極為細(xì)致的規(guī)范,只有組件程序遵守了這些共同的規(guī)范,然間系統(tǒng)才能正常運(yùn)行。為此,omg和microsoft分別提出了corba(common object request breaker archi
4、tecture)和com(component object model)標(biāo)準(zhǔn),目前corba模型主要應(yīng)用于unix操作系統(tǒng)平臺(tái)上,而com 則主要應(yīng)用于microsoft windows操作系統(tǒng)平臺(tái)上。 在com標(biāo)準(zhǔn)中,一個(gè)組件程序也被稱(chēng)為一個(gè)模塊,它可以是一個(gè)動(dòng)態(tài)連接庫(kù)(dll), 被稱(chēng)為進(jìn)程內(nèi)組件(in-of-process component),也可以是一個(gè)可執(zhí)行程序(exe),被稱(chēng)為進(jìn)程外組件(out-of-process component)。com對(duì)象是建立在二進(jìn)制可執(zhí)行代碼級(jí)的基礎(chǔ)上,而c+等語(yǔ)言中的對(duì)象是建立在源代碼級(jí)基礎(chǔ)上的,因此com對(duì)象是語(yǔ)言無(wú)關(guān)的。這一特性使用不同編程語(yǔ)
5、言開(kāi)發(fā)的組件對(duì)象進(jìn)行交互成為可能。在microsoft windows系統(tǒng)平臺(tái)上,com技術(shù)被應(yīng)用于系統(tǒng)的各個(gè)層次,從底層的com對(duì)象管理到上層的應(yīng)用程序交互都用到了com標(biāo)準(zhǔn)。1.2選題意義word是當(dāng)今非常流行的一款字處理軟件,是裝機(jī)的必備程序。但隨之而來(lái)的信息安全問(wèn)題也收到普遍關(guān)注。為了防止信息財(cái)產(chǎn)被故意或偶然地非授權(quán)泄漏,保護(hù)用戶(hù)的利益和隱私,有必要對(duì)文檔進(jìn)行加密。目前word文檔可以通過(guò)設(shè)置密碼來(lái)決定用戶(hù)是否有打開(kāi)文檔的權(quán)限,從而保護(hù)文檔信息安全。這樣是對(duì)整個(gè)文件的操作,并且必須要有密碼配合。我們可以通過(guò)一個(gè)插件對(duì)文檔內(nèi)容加解密,這樣使用起來(lái)更加簡(jiǎn)單方便。2理論基礎(chǔ)2.1 des算法
6、描述2.1.1 des算法框圖des對(duì)64(bit)位的明文分組m進(jìn)行操作,m經(jīng)過(guò)一個(gè)初始置換ip置換成m0,將m0明文分成左半部分和右半部分m0=(l0,r0),各32位長(zhǎng)。然后進(jìn)行16輪完全相同的運(yùn)算,這些運(yùn)算被稱(chēng)為函數(shù)f,在運(yùn)算過(guò)程中數(shù)據(jù)與密匙結(jié)合。經(jīng)過(guò)16輪后,左,右半部分合在一起經(jīng)過(guò)一個(gè)末置換。 在每一輪中,密匙位移位,然后再?gòu)拿艹椎?6位中選出48位。通過(guò)一個(gè)擴(kuò)展置換將數(shù)據(jù)的右半部分?jǐn)U展成48位,并通過(guò)一個(gè)異或操作替代成新的32位數(shù)據(jù),在將其置換換一次。這四步運(yùn)算構(gòu)成了函數(shù)f。然后,通過(guò)另一個(gè)異或運(yùn)算,函數(shù)f的輸出與左半部分結(jié)合,其結(jié)果成為新的右半部分,原來(lái)的右半部分成為新的左半部
7、分。將該操作重復(fù)16次,就實(shí)現(xiàn)了。具體如圖1所示:商業(yè)源代碼,全套計(jì)算機(jī)畢業(yè)設(shè)計(jì)免費(fèi)下載 更多全套設(shè)計(jì)聯(lián)系qq:1042897696最新設(shè)計(jì)大全 圖1 des算法框圖2.1.2 des解密 加密和解密使用相同的算法。 des加密和解密唯一的不同是密匙的次序相反。如果各輪加密密匙分別是k1,k2,k3.k16那么解密密匙就是k16,k15,k14k1。2.1.3 des算法原理(1)處理密鑰:從用戶(hù)處獲得64位密鑰.(每第8位為校驗(yàn)位,為使密鑰有正確的奇偶校驗(yàn),每個(gè)密鑰要有奇數(shù)個(gè)1位.(本文如未特指,均指二進(jìn)制位)(2)具體過(guò)程:對(duì)密鑰實(shí)施變換,使得變換以后的密鑰的各個(gè)位與原密鑰位對(duì)應(yīng)關(guān)系如下表
8、所示: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.計(jì)算子密鑰(共16個(gè)), 從i=1開(kāi)始。分別對(duì)ci-1,di-1作循環(huán)左移來(lái)生成ci,di.(共16次)。每次循環(huán)左移位數(shù)如下表所示:輪 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16位數(shù)
9、 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1串聯(lián)ci,di,得到一個(gè)56位數(shù),然后對(duì)此數(shù)作如下變換以產(chǎn)生48位子密鑰ki。變換過(guò)程如下: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按以上方法計(jì)算出16個(gè)子密鑰。對(duì)64位數(shù)據(jù)塊的處理:把數(shù)據(jù)分成64位的數(shù)據(jù)塊,不夠64位的以適當(dāng)?shù)姆绞教钛a(bǔ)。對(duì)數(shù)據(jù)塊作變換。58 50 42 34 26 18 10 2 60 52
10、 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將變換后的數(shù)據(jù)塊等分成前后兩部分,前32位記為l0,后32位記為r0。用16個(gè)子密鑰對(duì)數(shù)據(jù)加密。根據(jù)下面的擴(kuò)沖函數(shù)e,擴(kuò)展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
11、 22 23 24 2524 25 26 27 28 29 28 29 30 31 32 1用eri-1與ki作異或運(yùn)算。把所得的48位數(shù)分成8個(gè)6位數(shù)。1-6位為b1,7-12位為b2,. 43-48位為b8。用s密箱里的值替換bj。從j=1開(kāi)始。s密箱里的值為4位數(shù),共8個(gè)s密箱.取出bj的第1和第6位串聯(lián)起來(lái)成一個(gè)2位數(shù),記為m.m即是s密箱里用來(lái)替換bj的數(shù)所在的列數(shù)。取出bj的第2至第5位串聯(lián)起來(lái)成一個(gè)4位數(shù),記為n。n即是s密箱里用來(lái)替換bj的數(shù)所在的行數(shù)。用s密箱里的值sj m n替換bj。8個(gè)s密箱如下所示:s-boxe:s1binary d1d6 =; 00 01 10 11
12、/ 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個(gè)數(shù)據(jù)塊都被替換。把b1至b8順序串聯(lián)起來(lái)得到一個(gè)32位數(shù)。對(duì)這個(gè)數(shù)做如下變換: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
13、3031 15 4 3110 16 25 32把得到的結(jié)果與li-1作異或運(yùn)算。把計(jì)算結(jié)果賦給ri。把ri-1的值賦給li。從a循環(huán)執(zhí)行,直到k16也被用到。把r16和l16 順序串聯(lián)起來(lái)得到一個(gè)64位數(shù)。對(duì)這個(gè)數(shù)實(shí)施ii變換的逆變換。以上就是des算法如何加密一段64位數(shù)據(jù)塊。解密時(shí)用同樣的過(guò)程,只需把16個(gè)子密鑰的順序顛倒過(guò)來(lái),應(yīng)用的順序?yàn)閗16,k15,k14,.k1。 2.2 com組件簡(jiǎn)介2.2.1 組件com,是微軟公司為了計(jì)算機(jī)工業(yè)的軟件生產(chǎn)更加符合人類(lèi)的行為方式開(kāi)發(fā)的一種新的軟件開(kāi)發(fā)技術(shù)。在com構(gòu)架下,人們可以開(kāi)發(fā)出各種各樣的功能專(zhuān)一的組件,然后將它們按照需要組合起來(lái),構(gòu)成復(fù)
14、雜的應(yīng)用系統(tǒng)。由此帶來(lái)的好處是多方面的:可以將系統(tǒng)中的組件用新的替換掉,以便隨時(shí)進(jìn)行系統(tǒng)的升級(jí)和定制;可以在多個(gè)應(yīng)用系統(tǒng)中重復(fù)利用同一個(gè)組件;可以方便的將應(yīng)用系統(tǒng)擴(kuò)展到網(wǎng)絡(luò)環(huán)境下;com與語(yǔ)言,平臺(tái)無(wú)關(guān)的特性使所有的程序員均可充分發(fā)揮自己的才智與專(zhuān)長(zhǎng)編寫(xiě)組件模塊;等等。 com是開(kāi)發(fā)軟件組件的一種方法。組件實(shí)際上是一些小的二進(jìn)制可執(zhí)行程序,它們可以給應(yīng)用程序,操作系統(tǒng)以及其他組件提供服務(wù)。開(kāi)發(fā)自定義的com組件就如同開(kāi)發(fā)動(dòng)態(tài)的,面向?qū)ο蟮腶pi。多個(gè)com對(duì)象可以連接起來(lái)形成應(yīng)用程序或組件系統(tǒng)。并且組件可以在運(yùn)行時(shí)刻,在不被重新鏈接或編譯應(yīng)用程序的情況下被卸下或替換掉。microsoft的許多
15、技術(shù),如activex, directx以及ole等都是基于com而建立起來(lái)的。并且microsoft的開(kāi)發(fā)人員也大量使用com組件來(lái)定制他們的應(yīng)用程序及操作系統(tǒng)。com所含的概念并不止是在microsoft windows操作系統(tǒng)下才有效。com并不是一個(gè)大的api,它實(shí)際上象結(jié)構(gòu)化編程及面向?qū)ο缶幊谭椒菢?,也是一種編程方法。在任何一種操作系統(tǒng)中,開(kāi)發(fā)人員均可以遵循“com方法”。一個(gè)應(yīng)用程序通常使由單個(gè)的二進(jìn)制文件組成的。當(dāng)編譯器生成應(yīng)用程序之后,在對(duì)下一個(gè)版本重新編譯并發(fā)行新生成的版本之前,應(yīng)用程序一般不會(huì)發(fā)生任何變化。操作系統(tǒng),硬件及客戶(hù)需求的改變都必須等到整個(gè)應(yīng)用程序被重新生成。目
16、前這種狀況已經(jīng)發(fā)生變化。開(kāi)發(fā)人員開(kāi)始將單個(gè)的應(yīng)用程序分隔成單獨(dú)多個(gè)獨(dú)立的部分,也既組件。這種做法的好處是可以隨著技術(shù)的不斷發(fā)展而用新的組件取代以有的組件。此時(shí)的應(yīng)用程序可以隨新組件不斷取代舊的組件而漸趨完善。而且利用已有的組件,用戶(hù)還可以快速的建立全新的應(yīng)用。傳統(tǒng)的做法是將應(yīng)用程序分割成文件,模塊或類(lèi),然后將它們編譯并鏈接成一個(gè)單模應(yīng)用程序。它與組件建立應(yīng)用程序的過(guò)程(稱(chēng)為組件構(gòu)架)有很大的不同。一個(gè)組件同一個(gè)微型應(yīng)用程序類(lèi)似,即都是已經(jīng)編譯鏈接好并可以使用的二進(jìn)制代碼,應(yīng)用程序就是由多個(gè)這樣的組件打包而得到的。單模應(yīng)用程序只有一個(gè)二進(jìn)制代碼模塊。自定義組件可以在運(yùn)行時(shí)刻同其他的組件連接起來(lái)以
17、構(gòu)成某個(gè)應(yīng)用程序。在需要對(duì)應(yīng)用程序進(jìn)行修改或改進(jìn)時(shí),只需要將構(gòu)成此應(yīng)用程序的組件中的某個(gè)用新的版本替換掉即可。com,即組件對(duì)象模型,是關(guān)于如何建立組件以及如何通過(guò)組件建立應(yīng)用程序的一個(gè)規(guī)范,說(shuō)明了如何可動(dòng)態(tài)交替更新組件。2.2.2 接口對(duì)于com來(lái)講,接口是一個(gè)包含一個(gè)函數(shù)指針數(shù)組的內(nèi)存結(jié)構(gòu)。每一個(gè)數(shù)組元素包含的是一個(gè)由組件所實(shí)現(xiàn)的函數(shù)地址。對(duì)于com而言,接口就是此內(nèi)存結(jié)構(gòu),其他東西;均是com不關(guān)心的實(shí)現(xiàn)細(xì)節(jié)。在c+中,可以用抽象基類(lèi)來(lái)實(shí)現(xiàn)com接口。由于一個(gè)com組件可以實(shí)現(xiàn)支持任意數(shù)目的接口,因此對(duì)于這樣的組件,可以用抽象基類(lèi)的多重繼承來(lái)實(shí)現(xiàn)。用類(lèi)來(lái)實(shí)現(xiàn)組件將比其他方法更為容易。對(duì)于
18、客戶(hù)來(lái)說(shuō),一個(gè)組件就是一個(gè)接口集??蛻?hù)只能通過(guò)接口才能和com組件打交道。從整體上講,客戶(hù)對(duì)于一個(gè)組件可以說(shuō)是知之甚少的。通常情況下,客戶(hù)甚至不必知道一個(gè)組件所提供的所有接口??蛻?hù)同組件的交互是通過(guò)接口完成的。在客戶(hù)查詢(xún)組件其他的接口時(shí),也是通過(guò)接口完成的。這個(gè)接口就是iunknown。iunknown接口的定義包含在win32 sdk中的unknown.h的頭文件中,引用如下:interface iunknownvirtual hresult-_ _stdcall queryinterface(const iid& iid,void *ppv)=0;virtual ulong_ _stdca
19、ll addref()=0;virtual ulong_ _release()=0;所有的com都要繼承iunknown??梢杂胕unknown的接口指針來(lái)查詢(xún)?cè)摻M件的其他的接口,并且每個(gè)接口的vtbl中的前三個(gè)函數(shù)都是queryinterface,addref和release。這使得所有的com接口都可以被當(dāng)作成iunknown接口來(lái)處理。由于所有的接口都支持queryinterface,因此組件的任何一個(gè)接口都可以被客戶(hù)用來(lái)獲取它所支持的其他接口。在用queryinterface將組件抽象成由多個(gè)相互獨(dú)立的接口構(gòu)成的集合后,還需要管理組件的生命期。這一點(diǎn)是通過(guò)對(duì)接口的引用計(jì)數(shù)實(shí)現(xiàn)的??蛻?hù)并
20、不能直接控制組件的生命期。當(dāng)使用完一個(gè)接口而要用組件的另一個(gè)接口時(shí),是不能將改組件釋放的。對(duì)組件的釋放可以由組件在客戶(hù)使用完所有的組件之后自己完成。iunknown的另外兩個(gè)成員函數(shù)addref和release的作用就是給客戶(hù)提供一種讓它指示何時(shí)處理完一個(gè)接口的手段。addref和release實(shí)現(xiàn)的是一種名為引用技術(shù)的內(nèi)存管理技術(shù)。當(dāng)客戶(hù)從組件獲得一個(gè)接口時(shí),此引用計(jì)數(shù)值將增1。當(dāng)客戶(hù)使用完某個(gè)接口時(shí),組件的引用計(jì)數(shù)值將減1,當(dāng)引用計(jì)數(shù)值為0時(shí),組件可以將自己從內(nèi)存中刪除。addref和release可以增加和減少這一計(jì)數(shù)值。2.2.3 創(chuàng)建將組件分成多個(gè)接口只是將單模應(yīng)用分個(gè)成多個(gè)部分的第
21、一步,組件需要被放入動(dòng)態(tài)鏈接庫(kù)(dll)中。dll是一個(gè)組件服務(wù)程序,或者說(shuō)是發(fā)行組件的一種方式。組件實(shí)際上應(yīng)看成是在dll中實(shí)現(xiàn)的接口集。在客戶(hù)獲取某個(gè)組件接口指針之前,它必須先將相應(yīng)的dll裝載到其進(jìn)程空間中,并創(chuàng)建此組件。由于客戶(hù)組件所需要的所有函數(shù)都可以通過(guò)某個(gè)接口指針而訪問(wèn)到,因此,可以在dll中引出creatinstance函數(shù)就可以使用戶(hù)調(diào)用它。之后,可以裝載dll并調(diào)用其中的函數(shù)。此功能可由com庫(kù)函數(shù)cocreateinstance來(lái)實(shí)現(xiàn)。cocreateinstance創(chuàng)建組件的過(guò)程是:傳給它一個(gè)clsid,然后它創(chuàng)建相應(yīng)的組件,并返回指向所請(qǐng)求的接口的指針。但cocrea
22、teinstance沒(méi)有給客戶(hù)提供一種能控制組件創(chuàng)建過(guò)程的方法,缺乏一定的靈活性。事實(shí)上,常用類(lèi)廠來(lái)創(chuàng)建組件。類(lèi)廠就是一個(gè)帶有能夠創(chuàng)建其他組件的接口的組件??蛻?hù)先創(chuàng)建類(lèi)廠本身,然后再用一個(gè)接口(如iclassfactory)來(lái)創(chuàng)建所需的組件。然后還要用dllregistersever在windows中注冊(cè)這個(gè)組件。2.2.4 復(fù)用com組件可以被復(fù)用,它支持“接口繼承”。這種繼承指的是一個(gè)類(lèi)繼承其基類(lèi)的類(lèi)型或接口。抽象基類(lèi)是一種最純粹的接口繼承,并且正好也被用來(lái)實(shí)現(xiàn)com接口。在com中,我們可以用包容和聚合來(lái)對(duì)組件進(jìn)行改造。包容是在接口級(jí)完成的。外部組件包含指向內(nèi)部接口的指針。此時(shí),外部組件
23、僅僅是內(nèi)部組件的一個(gè)客戶(hù)而已,它將使用內(nèi)部組件的接口來(lái)實(shí)現(xiàn)它自己的接口。外部組件也可以通過(guò)將調(diào)用轉(zhuǎn)發(fā)給內(nèi)部組件的方法來(lái)重新實(shí)現(xiàn)內(nèi)部組件所支持的某個(gè)接口。并且外部組件還可以在內(nèi)部組件代碼的前后加上一些代碼以對(duì)接口進(jìn)行改造。聚合是包含的一種變化形式。當(dāng)外部組件聚合了某個(gè)內(nèi)部組件的一個(gè)接口時(shí),它并沒(méi)有象包容那樣重新實(shí)現(xiàn)此接口并顯式的將調(diào)用請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部組件。相反,外部組件直接把內(nèi)部組件的接口指針?lè)祷亟o客戶(hù)。使用這種方法,外部組件將無(wú)需重新實(shí)現(xiàn)并轉(zhuǎn)發(fā)接口中的所有函數(shù)了。包容和聚合為實(shí)現(xiàn)組件的復(fù)用提供了一種極具魯棒性的機(jī)制。在組件構(gòu)架下,客戶(hù)于組件的實(shí)現(xiàn)完全隔離開(kāi)了。2.3 插件簡(jiǎn)介插件是一類(lèi)特殊的組件
24、。它的目的不是為一般應(yīng)用程序使用,而是專(zhuān)為特定的應(yīng)用程序使用。插件一般在宿主應(yīng)用程序上添加控制項(xiàng),如菜單、工具按鍵等。插件響應(yīng)宿主程序中對(duì)這些項(xiàng)目的操作,并對(duì)宿主程序中的數(shù)據(jù)進(jìn)行特定操作。3 需求分析和方案設(shè)計(jì)3.1 需求分析 3.1.1功能需求用戶(hù)在編輯完文檔后可以選擇把文檔全部?jī)?nèi)容或部分內(nèi)容加密生成密文,同樣點(diǎn)擊插件中的解密按紐可以把密文還原為明文。 系統(tǒng)功能流程圖見(jiàn)圖2:y用戶(hù)是否要求加密des加密word內(nèi)容word是否被des加密des解密word內(nèi)容保存word內(nèi)容nyn圖2 系統(tǒng)功能流程圖3.1.2 開(kāi)發(fā)環(huán)境本插件在word2003下開(kāi)發(fā),可以在windows2000/2003/
25、xp等操作系統(tǒng)下運(yùn)行。開(kāi)發(fā)環(huán)境配置表,如表1:表1系統(tǒng)配置表pc硬件處理器:intel pii 450 或更好內(nèi) 存:256 m 或更大硬 盤(pán):20 g 或更大軟件microsoft windows nt server 4.0 或更高版本microsoft office 20033.2 方案設(shè)計(jì)此功能的實(shí)現(xiàn)包括了des算法的實(shí)現(xiàn)和插件的實(shí)現(xiàn)??梢杂胿b編寫(xiě)word插件, vb以其開(kāi)發(fā)的易學(xué)好用和強(qiáng)大的用戶(hù)界面設(shè)計(jì)能力倍受程序員的青睞,是微軟公司推出的開(kāi)發(fā)windows應(yīng)用程序的主力平臺(tái)之一。但其不能直接對(duì)寄存器進(jìn)行操作,沒(méi)有直接的輸入輸出端口操作語(yǔ)句,考慮到des算法的效率與實(shí)現(xiàn)等問(wèn)題,必須借
26、助其他編程語(yǔ)言,而c/c+語(yǔ)言具備較高的運(yùn)行效率,所以可以通過(guò)在vc環(huán)境下編寫(xiě)出高效的des算法代碼的動(dòng)態(tài)鏈接庫(kù)(dll),然后在vb中調(diào)用。加密worddes算法模塊運(yùn)行加密插件word內(nèi)容加密解密調(diào)用des加密模塊調(diào)用des解密模塊word內(nèi)容解密圖3 系統(tǒng)設(shè)計(jì)流程圖4 程序的實(shí)現(xiàn)4.1 vc建立des算法模塊新建win32動(dòng)態(tài)庫(kù)工程,如下圖所示:圖4 建立win32動(dòng)態(tài)庫(kù)工程4.1.1 加密導(dǎo)出函數(shù)的定義void _stdcall encode(char *sinput, char *soutput) /sinput輸入字符串,soutput輸出字符串char buf1024; /定義1
27、024字節(jié)的緩沖變量memset(buf, 0x00, sizeof(buf); /緩沖區(qū)清零des_go(buf, sinput, sizeof(sinput), key, sizeof(key), encrypt); /加密函數(shù)strcpy(soutput,buf);/將加密后的字符串輸出4.1.2解密導(dǎo)出函數(shù)的定義void _stdcall decode(char *sinput, char *soutput) /sinput輸入字符串,soutput輸出字符串char buf1024; /定義1024字節(jié)的緩沖變量memset(buf, 0x00, sizeof(buf); /緩沖區(qū)清
28、零des_go(buf, sinput, sizeof(sinput), key, sizeof(key), decrypt); /解密函數(shù)strcpy(soutput,buf); /將加密后的字符串輸出4.1.3加解密相關(guān)函數(shù)的聲名typedef bool (*psubkey)1648;static void des(char out8, char in8, const psubkey psubkey, bool type);/標(biāo)準(zhǔn)des加/解密static void setkey(const char* key, int len);/ 設(shè)置密鑰static void setsubkey(p
29、subkey psubkey, const char key8);/設(shè)置子密鑰static void f_func(bool in32, const bool ki48);/ f 函數(shù)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(b
30、ool *in, int len, int loop);/ 循環(huán)左移static void bytetobit(bool *out, const char *in, int bits);/字節(jié)組轉(zhuǎn)換成位組static void bittobyte(char *out, const bool *in, int bits);/位組轉(zhuǎn)換成字節(jié)組static bool subkey21648;/ 16圈子密鑰static bool is3des;/ 3次des標(biāo)志static char tmp256, deskey16;4.2 vb編寫(xiě)word插件4.2.1建立word插件工程(1)創(chuàng)建“外接程序”工
31、程,如圖5:圖5 vb中新建工程圖(2) 打開(kāi)“設(shè)計(jì)器”中的connect設(shè)計(jì)器。雙擊該connect的圖標(biāo),如圖6:圖6 工程項(xiàng)目圖修改其中的工程名和應(yīng)用程序。其中,“應(yīng)用程序”選擇該插件是針對(duì)哪個(gè)具體的應(yīng)用程序的。這里選word。(3)添加對(duì)word類(lèi)型庫(kù)的引用,如圖7圖7 工程引用圖系統(tǒng)缺省添加了對(duì)office類(lèi)型庫(kù)的引用。但由于開(kāi)發(fā)的是word插件,因此需要存取word中的對(duì)象。所有必須添加對(duì)word的引用。(4)打開(kāi)該設(shè)計(jì)器的代碼窗口。設(shè)計(jì)器的代碼就是插件接口方法的實(shí)現(xiàn)。1)刪除系統(tǒng)缺省添加的代碼。系統(tǒng)缺省添加的代碼是針對(duì)vb插件的,而不是word或其它應(yīng)用程序插件的。因此刪除它們。
32、2)添加addininstance對(duì)象的onconnection方法。addininstance就代表了該插件本身。(5) 調(diào)試設(shè)置該工程的屬性,將“調(diào)試”中的啟動(dòng)程序設(shè)置為系統(tǒng)中安裝的winword.exe。圖8 工程屬性圖此后,可以設(shè)置斷點(diǎn),運(yùn)行。采用標(biāo)準(zhǔn)vb中的調(diào)試方法調(diào)試程序。(6) 安裝1)生成dll后,自動(dòng)在本機(jī)注冊(cè)該插件。本機(jī)以后就可以使用了。2)在其它機(jī)器安裝:將dll拷貝到system32目錄(其它目錄也可以)運(yùn)行:regsvr32 dll文件全路徑(system32目錄不用路徑)3)刪除運(yùn)行:regsvr32 -u dll文件全路徑(system32目錄不用路徑)4.2.2
33、 word代碼的編寫(xiě)(1) api函數(shù)聲明使用api文本瀏覽器貼入的winapi函數(shù)聲明private declare function openclipboard lib user32 (byval hwnd as long) as long 聲明打開(kāi)剪貼板函數(shù)private declare function closeclipboard lib user32 () as long 聲明關(guān)閉剪貼板函數(shù)private declare function emptyclipboard lib user32 () as long 聲明清除剪貼板函數(shù)private declare function s
34、etclipboarddata lib user32 (byval wformat as long, byval hmem as long) as long 聲明剪貼板賦值函數(shù)private declare sub encode lib dll (byval sinput as string, byval soutput as string) 加密函數(shù)的聲明private declare sub decode lib dll (byval sinput as string, byval soutput as string) 解密函數(shù)的聲明private const cf_bitmap = 2p
35、rivate mappword as word.applicationprivate mbar as office.commandbar使用withevents聲明,可以定義mbtn1,mbtn2的事件響應(yīng)程序private withevents mbtn1 as office.commandbarbuttonprivate withevents mbtn2 as office.commandbarbutton(2)添加工具欄加密解密按鈕private sub addininstance_onconnection(byval application as object, byval conne
36、ctmode 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(o
37、ffice.msocontroltype.msocontrolbutton)添加mbtn2按鈕的事件 setbuttonstyle mbtn1, 203, 加密, encode, msobuttoniconandcaption 定義加密按鈕 setbuttonstyle mbtn2, 203, 解密, decode, msobuttoniconandcaption 定義解密按鈕end sub(3)定義按鈕風(fēng)格private sub setbuttonstyle(btn as office.commandbarbutton, idpic as long, scaption as string,
38、stooltip as string, btnstyle as msobuttonstyle) 設(shè)置按鍵圖標(biāo) 這里需要使用winapi函數(shù),見(jiàn)最上面的函數(shù)聲明(使用開(kāi)始菜單中”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
39、 closeclipboard btn.pasteface end if 設(shè)置按鍵文本 btn.caption = scaption 設(shè)置按鍵的tooltip幫助信息 btn.tooltiptext = stooltip 顯示按鍵 btn.visible = true 設(shè)置按鍵風(fēng)格 btn.style = btnstyle 設(shè)置按鍵為允許 btn.enabled = trueend sub(4)加密按鈕事件private sub mbtn1_click(byval ctrl as office.commandbarbutton, canceldefault as boolean) 操作word對(duì)象dim doc as word.document 取word當(dāng)前活動(dòng)文檔 set doc = mappword.activedocument dim para as word.range dim temp as string * 1024 分配1024個(gè)字節(jié)緩沖區(qū) set para = doc.range encode para.text, temp 文檔加密 para.text = temp 設(shè)置該段的顏色 para.font.co
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 家庭健康檔案與疾病預(yù)防計(jì)劃表
- 股份制改革流程操作指南
- 養(yǎng)殖產(chǎn)業(yè)合作與獸醫(yī)服務(wù)協(xié)議
- 專(zhuān)業(yè)寫(xiě)作培訓(xùn)資源共享協(xié)議
- 公司內(nèi)部人事調(diào)整規(guī)章制度
- 智能交通系統(tǒng)建設(shè)及交通管理優(yōu)化方案設(shè)計(jì)
- 工作流程表格-任務(wù)清單
- 電子會(huì)議系統(tǒng)使用記錄表格
- 數(shù)學(xué)故事征文探索數(shù)學(xué)之美與實(shí)際應(yīng)用價(jià)值
- 歷史古代文明發(fā)展脈絡(luò)閱讀題
- 人工智能應(yīng)用概論(第2版) 教案全套 莫少林
- 食品安全演練預(yù)案及流程
- 2025屆威海市高三語(yǔ)文上學(xué)期期末考試卷附答案解析
- 《病例隨訪匯報(bào)》課件
- 細(xì)胞抗衰知識(shí)培訓(xùn)課件
- 新能源汽車(chē)充電設(shè)施建設(shè)規(guī)劃與管理計(jì)劃
- 《污水中微塑料的測(cè)定 傅里葉變換顯微紅外光譜法》
- 貨物學(xué) 課件1.3貨物的計(jì)量
- 2025四川省資陽(yáng)市人民政府政務(wù)服務(wù)中心招聘4人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 華東師大版初中科學(xué)八年級(jí)上冊(cè)知識(shí)點(diǎn)
- 【MOOC】跨文化思想交流英語(yǔ)-南京理工大學(xué) 中國(guó)大學(xué)慕課MOOC答案
評(píng)論
0/150
提交評(píng)論