基于des加密算法的word加密插件的实现—计算机毕业设计内容摘要:

件响应宿主程序中对这些项目的操作,并对宿主程序中的数据进行特定操作。 3 需求分析和方案 设计 需求分析 功能需求 用户在编辑完文档后可以选择把文档全部内容或部分内容加密生成密文,同样点击插件中的解密按纽可以把密文还原为明文。 系统功能流程图 见图 2: 第 9 页 共 20 页 图 2 系统功能流程图 开发环境 本插件在 word2020 下开发,可以在 Windows2020/2020/xp 等 操作系统下运行。 开发环境配置表 ,如表 1: 表 1 系统配置表 PC 硬件 处理器: Intel PII 450 或更好 内 存: 256 M 或更大 硬 盘: 20 G 或更大 软件 Microsoft Windows NT Server 或更高版本 Microsoft Office 2020 Y 用户 是否要求加密 DES加密 Word内容 Word 是否被 DES加密 DES解密 Word内容 保存 Word内容 N Y N 第 10 页 共 20 页 方案设计 此功能的实现包括了 DES 算法的实现和插件的实现。 可以用 VB 编写 Word插件 , VB 以其开发的易学好用和强大的用户界面设计能力倍受程序员的青睐,是微软公司推出的开发 Windows 应用程序的主力平台之一。 但其不能直接对寄存器进行操作,没有直接的输入输出端口操作语句, 考虑到 DES 算法的效率与 实现等问题 ,必须借助其他编程语言,而 C/C++语言具备 较高的运行效率 ,所以可以通过在 VC 环境下编写出高效的 DES 算法代码 的动态链接库( DLL),然后在VB 中调用。 图 3 系统设计流程图 4 程序的实现 VC 建立 DES 算法模块 新建 Win32 动态库工程,如下图所示: 加密 Word DES算法模块 运行加密插件 Word内容加密 解密 调用 DES加密模块 调用 DES解密模块 Word内容解密 第 11 页 共 20 页 图 4 建立 Win32 动态库工程 加密导出函数的定义 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)。 //将加密后的字 符串输出 } 解密导出函数的定义 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)。 //将加密后的字符串输出 } 加解密相关函数的声名 typedef bool ( *PSubKey) [16][48]。 static void DES( char Out[8], char In[8], const PSubKey pSubKey, bool Type)。 /标准 DES 加 /解密 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 盒代替 第 12 页 共 20 页 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]。 VB 编写 Word 插件 建立 Word 插件工程 ( 1)创建“外接程序”工程,如图 5: 图 5 VB中新建工程图 (2) 打开“设计器”中的 Connect 设计器。 双击该 Connect 的图标 ,如图 6: 图 6 工程项目图 修改其中的工程名和应用程序。 其中,“应用程序”选择该插件是针对哪个具体的应用程序的。 这里选 Word。 ( 3) 添加对 Word类型库的引用 ,如图 7 第 13 页 共 20 页 图 7 工程引用图 系统缺省添加了对 Office类型库的引用。 但由于开发的是 Word插件,因此需要存取 Word中的对象。 所有必须添加对 Word的引用。 ( 4)打开该设计器的代码窗口。 设计器的代码就是插件接口方法的实现。 1) 删除系统缺省添加的代码。 系统缺省添加的代码是针对 VB插件的,而不是 Word或其它应用 程序插件的。 因此删除它们。 2) 添加 AddinInstance对象的 OnConnection方法。 AddinInstance就代表了该插件本身。 ( 5) 调试 设置该工程的属性,将“调试”中的启动程序设置为系统中安装的。 图 8 工程属性图 此后,可以设置断点,运行。 采用标准 VB中的调试方法调试程序。 ( 6) 安装 第 14 页 共 20 页 1) 生成 DLL后,自动在本机注册该插件。 本机以后就可以使用了。 2) 在其它机器安装: 将 DLL拷贝到 system32目录(其它目录也可以) 运行: regsvr32 DLL文件全路径( SYSTEM32目录不用路径) 3) 删除 运行: regsvr32 u DLL文件全路径( SYSTEM32目录不用路径) 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) ’加密函数的声明 Private Declare Sub Decode Lib DLL ( ByVal sInput As String, ByVal sOutput As String) ‘解密函数的声明 Private Const CF_BITMAP = 2 Private mAppWord As Private mBar As ‘使用 WithEvents 声明,可以定义 mBtn1,mBtn2 的事件响应程序 Private WithEvents mBtn1 As Private WithEvents mBtn2 As ( 2)添加工具栏加密解密按钮 Private Sub AddinInstance_OnConnection( ByVal Application As Object, ByVal ConnectMode As , ByVal AddInInst As Object, custom() As Variant) Set mAppWord = Application Set mBar = ( My Toolbar for VB, , , True) Set mBtn1 = ( ) ’添加 mBtn按钮的事件 Set mBtn2 = ( ) ’添加 mBtn2按钮的事件 SetButtonStyle mBtn1, 203, 加密 , Encode, msoButtonIconAndCaption ‘定义加密按钮 SetButtonStyle mBtn2, 203, 解密 , Decode, msoButtonIconAndCaption ‘定义解密按钮 End Sub ( 3)定义按钮风格 Private Sub SetButtonStyle( btn As , idPic As Long, sCaption As String, sToolTip As String, btnStyle As MsoButtonStyle) ‘设置按键图标 ‘这里需要使用 WinAPI函数,见最上面的函数声明(使用开始菜单中 ”Microsoft Visual Basic 第 15 页 共 20 页 API 文本浏览器 ”选择和粘贴 Dim bmp As IPictureDisp Set bmp = LoadResPicture( 203, vbResBitmap) 39。 vb 加载资源的方法 If Not bmp Is Nothing Then OpenClipboard 0 EmptyClipboard SetClipboardData CF_BITMAP, CloseClipboard End If 39。 设置按键文本 = sCaption 39。 设置按键的 ToolTip 帮助信息 = sToolTip 39。 显示按键 = True 39。 设置按键风格 = btnStyle 39。 设置按键为允许 = True End Sub ( 4) 加密按钮事件 Private Sub mBtn1_Click( ByVal Ctrl As , CancelDefault As Boolean) 39。 操作 Word 对象 Dim doc As 39。 取 Word 当前活动文档 Set doc = Dim para As Dim temp As String * 1024 ‘分配 1024 个字节缓冲区 Set para =。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。