论文无忧网提供:计算机毕业论文范文|计算机毕业设计|计算机毕业论文
栏目导航 ASP Java Web .NET VB6.0 JAVA VC VF DELPHI PB 计算机网络 计算机科学与技术 PHP 安卓APP 其他 C# 代写论文
当前位置: > 计算机 > 计算机科学与技术 >

基于des加密算法的word加密插件的实现(论文+程序)

paper51.com

图3 系统设计流程图 内容来自www.paper51.com

4 程序的实现4.1  VC建立DES算法模块

http://www.paper51.com

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

内容来自论文无忧网 www.paper51.com

copyright paper51.com

图4 建立Win32动态库工程 内容来自www.paper51.com

4.1.1 加密导出函数的定义 paper51.com

void __stdcall Encode(char *sInput, char *sOutput)   //sInput输入字符串,sOutput输出字符串 paper51.com

{

paper51.com

       charbuf[1024];                     //定义1024字节的缓冲变量 内容来自www.paper51.com

       memset(buf, 0x00, sizeof(buf));        //缓冲区清零 内容来自www.paper51.com

       Des_Go(buf, sInput, sizeof(sInput), key, sizeof(key), ENCRYPT);    //加密函数 内容来自论文无忧网 www.paper51.com

       strcpy(sOutput,buf);                             //将加密后的字符串输出

copyright paper51.com

} 内容来自www.paper51.com

4.1.2解密导出函数的定义 http://www.paper51.com

void __stdcall Decode(char *sInput, char *sOutput)  //sInput输入字符串,sOutput输出字符串

copyright paper51.com

{ 内容来自www.paper51.com

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

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

copyright paper51.com

       Des_Go(buf, sInput, sizeof(sInput), key, sizeof(key), DECRYPT);     //解密函数 http://www.paper51.com

       strcpy(sOutput,buf);                 //将加密后的字符串输出

copyright paper51.com

} http://www.paper51.com

4.1.3加解密相关函数的声名 http://www.paper51.com

typedef  bool  (*PSubKey)[16][48]; http://www.paper51.com

staticvoid DES(char Out[8], char In[8], constPSubKey pSubKey, bool Type);/标准DES加/解密 paper51.com

staticvoid SetKey(const char* Key, int len);// 设置密钥 内容来自www.paper51.com

staticvoid SetSubKey(PSubKey pSubKey, const char Key[8]);//设置子密钥

paper51.com

staticvoid F_func(bool In[32], const bool Ki[48]);// f 函数 http://www.paper51.com

staticvoid S_func(bool Out[32], const bool In[48]);// s 盒代替 paper51.com

staticvoid Transform(bool *Out, bool *In, const char*Table, int len);// 变换

http://www.paper51.com

staticvoid Xor(bool *InA, const bool *InB, int len);// 异或 paper51.com

staticvoid RotateL(bool *In, int len, int loop);// 循环左移 http://www.paper51.com

staticvoid ByteToBit(bool *Out, const char *In, int bits);//字节组转换成位组 内容来自www.paper51.com

staticvoid BitToByte(char *Out, const bool *In, int bits);//位组转换成字节组 内容来自www.paper51.com

staticbool SubKey[2][16][48];// 16圈子密钥 内容来自www.paper51.com

staticbool Is3DES;// 3次DES标志

paper51.com

staticchar Tmp[256], deskey[16]; copyright paper51.com

4.2 VB编写Word插件    http://www.paper51.com

4.2.1建立Word插件工程 内容来自www.paper51.com

(1)创建“外接程序”工程,如图5: 内容来自论文无忧网 www.paper51.com

内容来自论文无忧网 www.paper51.com

图5 VB中新建工程图 内容来自www.paper51.com

(2) 打开“设计器”中的Connect设计器。双击该Connect的图标,如图6:

copyright paper51.com

paper51.com

内容来自论文无忧网 www.paper51.com

图6 工程项目图

paper51.com

修改其中的工程名和应用程序。其中,“应用程序”选择该插件是针对哪个具体的应用程序的。这里选Word。

内容来自论文无忧网 www.paper51.com

(3)添加对Word类型库的引用,如图7

内容来自www.paper51.com

copyright paper51.com

图7 工程引用图 内容来自论文无忧网 www.paper51.com

系统缺省添加了对Office类型库的引用。但由于开发的是Word插件,因此需要存取Word中的对象。所有必须添加对Word的引用。 paper51.com

(4)打开该设计器的代码窗口。设计器的代码就是插件接口方法的实现。 内容来自www.paper51.com

1)删除系统缺省添加的代码。

内容来自论文无忧网 www.paper51.com

系统缺省添加的代码是针对VB插件的,而不是Word或其它应用程序插件的。因此删除它们。 内容来自www.paper51.com

2)添加AddinInstance对象的OnConnection方法。AddinInstance就代表了该插件本身。

http://www.paper51.com

(5) 调试

copyright paper51.com

设置该工程的属性,将“调试”中的启动程序设置为系统中安装的WinWord.exe。

内容来自www.paper51.com

http://www.paper51.com

图8 工程属性图 内容来自www.paper51.com

此后,可以设置断点,运行。采用标准VB中的调试方法调试程序。 内容来自论文无忧网 www.paper51.com

(6) 安装 paper51.com

1)生成DLL后,自动在本机注册该插件。本机以后就可以使用了。

http://www.paper51.com

2)在其它机器安装: http://www.paper51.com

将DLL拷贝到system32目录(其它目录也可以)

copyright paper51.com

运行:regsvr32 DLL文件全路径(SYSTEM32目录不用路径)

内容来自论文无忧网 www.paper51.com

3)删除

内容来自www.paper51.com

运行:regsvr32 -u DLL文件全路径(SYSTEM32目录不用路径) 内容来自论文无忧网 www.paper51.com

4.2.2 Word代码的编写

内容来自www.paper51.com

(1)  API函数声明 paper51.com

‘使用API文本浏览器贴入的WinAPI函数声明

copyright paper51.com

PrivateDeclare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long ‘声明打开剪贴板函数 paper51.com

PrivateDeclare Function CloseClipboard Lib "user32" () As Long ‘声明关闭剪贴板函数 内容来自论文无忧网 www.paper51.com

PrivateDeclare Function EmptyClipboard Lib "user32" () As Long ‘声明清除剪贴板函数

copyright paper51.com

PrivateDeclare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long   ‘声明剪贴板赋值函数 内容来自www.paper51.com

PrivateDeclare Sub Encode Lib "DLL" (ByVal sInputAs String, ByVal sOutput As String)  ’加密函数的声明

paper51.com

PrivateDeclare Sub Decode Lib "DLL" (ByVal sInputAs String, ByVal sOutput As String)  ‘解密函数的声明

http://www.paper51.com

PrivateConst CF_BITMAP = 2

内容来自www.paper51.com

PrivatemAppWord As Word.Application http://www.paper51.com

PrivatemBar As Office.CommandBar http://www.paper51.com

‘使用WithEvents声明,可以定义mBtn1,mBtn2的事件响应程序

内容来自www.paper51.com

PrivateWithEvents mBtn1 As Office.CommandBarButton 内容来自www.paper51.com

PrivateWithEvents mBtn2 As Office.CommandBarButton 内容来自www.paper51.com

(2)添加工具栏加密解密按钮 copyright paper51.com

PrivateSub AddinInstance_OnConnection(ByVal Application As Object, ByValConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object,custom() As Variant)

copyright paper51.com

    Set mAppWord = Application paper51.com

    Set mBar =mAppWord.CommandBars.Add("My Toolbar for VB", , ,True) http://www.paper51.com

    Set mBtn1 =mBar.Controls.Add(Office.MsoControlType.msoControlButton)’添加mBtn按钮的事件

paper51.com

    Set mBtn2 =mBar.Controls.Add(Office.MsoControlType.msoControlButton)’添加mBtn2按钮的事件 内容来自www.paper51.com

    SetButtonStyle mBtn1, 203,"加密", "Encode",msoButtonIconAndCaption ‘定义加密按钮 内容来自www.paper51.com

    SetButtonStyle mBtn2, 203,"解密", "Decode",msoButtonIconAndCaption ‘定义解密按钮

内容来自论文无忧网 www.paper51.com

EndSub 内容来自论文无忧网 www.paper51.com

(3)定义按钮风格

内容来自www.paper51.com

PrivateSub SetButtonStyle(btn As Office.CommandBarButton,idPic As Long, sCaption As String, sToolTip As String, btnStyle AsMsoButtonStyle) http://www.paper51.com

   ‘设置按键图标 http://www.paper51.com

  ‘这里需要使用WinAPI函数,见最上面的函数声明(使用开始菜单中”Microsoft Visual Basic API 文本浏览器”选择和粘贴 paper51.com

    Dim bmp As IPictureDisp 内容来自www.paper51.com

    Set bmp = LoadResPicture(203, vbResBitmap) 'vb加载资源的方法 内容来自www.paper51.com

    If Not bmp Is Nothing Then 内容来自论文无忧网 www.paper51.com

        OpenClipboard0 copyright paper51.com

       EmptyClipboard http://www.paper51.com

       SetClipboardData CF_BITMAP, bmp.Handle

http://www.paper51.com

       CloseClipboard

copyright paper51.com

       btn.PasteFace

内容来自www.paper51.com

    End If

copyright paper51.com

   

内容来自论文无忧网 www.paper51.com

------分隔线----------------------------
联系方式