优秀的毕业设计论文网
计算机 JAVA 电子信息 单片机 机械机电 模具 土木工程 建筑结构 论文
热门搜索词:网络 ASP.NET 汽车 电气 数控 PLC

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

以下是资料介绍,如需要完整的请充值下载.
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
  
资料介绍:

需求分析和方案设计
3.1 需求分析
3.1.1功能需求
用户在编辑完文档后可以选择把文档全部内容或部分内容加密生成密文,同样点击插件中的解密按纽可以把密文还原为明文。 系统功能流程图见图2: 【买计算机毕业论文就到www.think58.com】 think58.com

[资料来源:http://THINK58.com]


图2 系统功能流程图 本文来自think58

[资料来源:http://THINK58.com]


3.1.2 开发环境
本插件在word2003下开发,可以在Windows2000/2003/xp等操作系统下运行。开发环境配置表,如表1: think58好,好think58 [资料来源:http://think58.com]

表1系统配置表
PC 硬件 处理器:Intel PII 450 或更好
内 存:256 M 或更大
硬 盘:20 G 或更大
软件 Microsoft Windows NT Server 4.0 或更高版本
Microsoft Office 2003 think58好,好think58 [来源:http://think58.com]


3.2 方案设计
此功能的实现包括了DES算法的实现和插件的实现。可以用VB编写Word插件, VB以其开发的易学好用和强大的用户界面设计能力倍受程序员的青睐,是微软公司推出的开发Windows应用程序的主力平台之一。但其不能直接对寄存器进行操作,没有直接的输入输出端口操作语句,考虑到DES算法的效率与实现等问题,必须借助其他编程语言,而C/C++语言具备较高的运行效率,所以可以通过在VC环境下编写出高效的DES算法代码的动态链接库(DLL),然后在VB中调用。 think58.com [资料来源:http://www.THINK58.com]

copyright think58 [来源:http://think58.com]

本文来自think58 [资料来源:www.THINK58.com]

[来源:http://think58.com]

内容来自think58

[资料来源:THINK58.com]

[资料来源:http://think58.com]

[资料来源:http://think58.com]

copyright think58 [资料来源:THINK58.com]



图3 系统设计流程图 copyright think58 [版权所有:http://think58.com]

4 程序的实现
4.1 VC建立DES算法模块
新建Win32动态库工程,如下图所示:

图4 建立Win32动态库工程
4.1.1 加密导出函数的定义
void __stdcall Encode(char *sInput, char *sOutput) //sInput输入字符串,sOutput输出字符串
{
char buf[1024]; //定义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 buf[1024]; //定义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)[16][48];
static void DES(char Out[8], char In[8], const PSubKey pSubKey, bool Type);/标准DES加/解密 think58 [资料来源:www.THINK58.com]
static void SetKey(const char* Key, int len);// 设置密钥
static void SetSubKey(PSubKey pSubKey, const char Key[8]);//设置子密钥
static void F_func(bool In[32], const bool Ki[48]);// f 函数
static void S_func(bool Out[32], const bool In[48]);// 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 SubKey[2][16][48];// 16圈子密钥
static bool Is3DES;// 3次DES标志
static char Tmp[256], deskey[16];
4.2 VB编写Word插件
4.2.1建立Word插件工程
(1)创建“外接程序”工程,如图5:

图5 VB中新建工程图 think58好,好think58

[资料来源:www.THINK58.com]

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

[资料来源:www.THINK58.com]



图6 工程项目图
修改其中的工程名和应用程序。其中,“应用程序”选择该插件是针对哪个具体的应用程序的。这里选Word。
(3)添加对Word类型库的引用,如图7

图7 工程引用图
系统缺省添加了对Office类型库的引用。但由于开发的是Word插件,因此需要存取Word中的对象。所有必须添加对Word的引用。
(4)打开该设计器的代码窗口。设计器的代码就是插件接口方法的实现。
1)删除系统缺省添加的代码。
系统缺省添加的代码是针对VB插件的,而不是Word或其它应用程序插件的。因此删除它们。
2)添加AddinInstance对象的OnConnection方法。AddinInstance就代表了该插件本身。
(5) 调试
设置该工程的属性,将“调试”中的启动程序设置为系统中安装的WinWord.exe。 copyright think58

[版权所有:http://think58.com]

think58

[资料来源:http://www.THINK58.com]

[资料来源:http://www.THINK58.com]

本文来自think58 [资料来源:http://www.THINK58.com]

本文来自think58

[来源:http://think58.com]

think58.com [资料来源:www.THINK58.com]

图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) ’加密函数的声明

本文来自think58 [来源:http://www.think58.com]


Private Declare Sub Decode Lib "DLL" (ByVal sInput As String, ByVal sOutput As String) ‘解密函数的声明
Private Const CF_BITMAP = 2
Private mAppWord As Word.Application
Private mBar As Office.CommandBar
‘使用WithEvents声明,可以定义mBtn1,mBtn2的事件响应程序
Private WithEvents mBtn1 As Office.CommandBarButton
Private 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 ‘定义加密按钮 copyright think58

[来源:http://think58.com]


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 = True
End Sub

本文来自think58

[资料来源:http://www.THINK58.com]


(4)加密按钮事件
Private Sub mBtn1_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
'操作Word对象
Dim doc As Word.Document

[资料来源:http://THINK58.com]

'取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 = wdColorBlue
End 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 Sub

[资料来源:http://THINK58.com]