文档管理一体化系统关键技术研究
2014-07-24俞晓
俞晓
摘要:该文针对文档管理一体化系统涉及到的重要的关键技术进行了研究,包括Word进程与Windows窗体的融合技术、基于VSTO技术的Word文档处理技术、数据交换安全加密技术和加解密时间优化策略,提出了相应的解决办法。
关键词:文档管理;进程;安全;VSTO;AES
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)15-3684-04
Key Technologies Research of Integrated System of Document Management
YU Xiao
(Computer Department of Sichuan Normal University, Chengdu 610101, China)
Abstract: This article studies on key technologies of integrated system of document management including the technology of Word Process and Windows Form fusion, the technology of Word Process based on VSTO, the technology of data exchange security encryption and the technology of encryption time optimization strategy. This article also puts forward practicable methods.
Key words: management of document; process; security; VSTO; AES
目前,政府部门、大专院校和科研院所在日常工作和科研中涉及到大量文档处理的工作。其中相当一部分文档有固定的文档格式和文档审批流程。同时,文档中涉及到的诸如经费、人员比例、单位等信息需要进行查询统计。这就产生了大量的事务性工作。例如,国家自然科学基金自1986年成立时,经费仅为8000万,随着国家财政对基础研究的投入不断增长,自然科学基金从1986年的8000万元起步增长到2013年的235亿元[1],与1986年比达到了294倍,项目填写、申报、审批、评审的工作量大大增加。
文档填报和管理已经成为越来越繁重的工作。政府部门、相关企事业单位要处理来自于下属单位的大量的Word文档,这些Word文档通常有特定的内容和专门的格式,同时文档需要专门的管理,文档内部的内容又迫切需要查询和统计,而现在一般的文档管理系统都未能对文档内部的内容进行管理。只能对整个文档的描述进行管理。
当前的文档处理方式大都基于一个Word模板的方式,用一种特定格式的文档制作成模板,采用VBA 或者VSTO的方式来进行文档的特定管理。例如,国家自然科学基金的申报书,就是采用这种方式。尽管这种方式可以在文档内部通过相应位置弹出窗口来配合输入,一定程度上控制了文档的格式和录入标准,提高了文档录入的效率,但是其弊端也是显而易见的。首先是一种文档处理就需要一个文档模板,把代码分别嵌入到每个文档中去,这导致万一出现bug,或者项目需要升级时,就很难处理。需要对于每个文档进行修改,这种低效率在企业级应用中是无法容忍的,其次,文档缺乏有效的管理,没有办法对文档版本和文档内容进行控制,只能人工的维护,导致效率低下,再者,文档的安全性得不到保证,无法对文档进行安全加密解密处理,无法保证文档传输过程中的安全性。一旦文档被窃取,文档内容泄露导致的损失无可避免,最后,无论是文档填报者还是文档管理者,都需要大量手工的劳动来完成事务处理工作以及统计查询分析工作。
要解决当前文档处理存在的问题,就需要一个能够管理和协助文档录入工作并能够对文档流转进行管理、对文档进行加密解密处理的系统。系统还必须能够对文档的内容进行统计查询。这些功能必须对用户是透明的。用户无需了解文档如何存放,如何加密解密,如何查询统计分析。设计这样的系统,需要解决不少技术难题。由于系统采用Word,一些技术难题来源于微软的底层实现的漏洞。
本文针对文档管理一体化系统涉及到的关键技术进行了研究。
1 Word进程与Windows窗体的融合技术
通过调用底层Windows API調用来实现,涉及到进程、消息、GDI等底层操作。可以实现Word进程嵌入Windows窗体。这样就能够开发出一体化的文档管理系统。从而使Word本身成为系统的一部分,系统通过Com调用和Word通信。这样Word可以和开发的系统完美结合,实现软件一体化。主要涉及难点如下:
1) 系统使用Word进程与外部文档使用Word进程的冲突问题。
使用应用程序类为系统打开独立的Word进程,并隐藏Word进程界面,通过Com接口控制Word,但是当外部文档打开的时候,会默认查看进程列表,从而使用系统使用的Word进程,外部文档显示在了系统签入Word界面中,导致使用混乱。解决办法是采用应用程序类的DocumentOpen事件捕获外部文档打开的动作,外部文档进入系统内部进程采用的文档标识号为“文档”加数字,根据此条件在事件处理句柄中进行拦截,并向调用窗体线程发送消息,同时主动关闭打开的文档。
2) 系统使用Word进程与外部文档使用Word进程的冲突问题。
在调用Win32API嵌入Word进程窗体的时候,如果失去焦点,会导致窗体无法正常切换回来,过去通常的解决办法是提示用户耐心等到Word打开,这种办法不友好。可以采用在每一个关键操作前后调用父类的Focus()方法来避免窗体焦点的丢失,从而解决问题。
3) 提高文档打开效率。
通常文档打开的时候,想载入Word进程,进行菜单、工具栏的初始化设置,在打开文档,这个过程会持续数秒到几十秒的时间,从用户的角度来说,使用起来非常缓慢。如果能迅速打开文档,则能有好的用户体验。可以采用Word进程池预先载入的方式,在系统开始的时候预先打开几个Word进程,并进行初始化,并隐藏进程。当文档载入的时候,选择其中的一个Word进程来使用,用完以后再次隐藏进程,并且不关闭进程。标识Word进程的除了重要的ApplicationClass之外,就是进程本身的句柄,ApplicationClass可以操作Word进程,而进程句柄则可以对进程关闭的时候作为标识使用。如果系统意外崩溃,Word进程就成了孤悬进程,无法在被正常使用,那么可以通过系统记载在日志文件离得Word进程句柄,重启系统的时候,用句柄直接将上次的Word进程关闭。
相关数组可以定义如下:
Word应用类数组: public static Word.ApplicationClass[] wd1 = new Word.ApplicationClass[nMaxDocNumber];
Word进程句柄数组: public static int[] wordWnd1 = new int[nMaxDocNumber];
Word 进程数组:public static Process[] wordProcess = new Process[nMaxDocNumber];
2 基于VSTO技术的Word文档处理技术
常用的Word文档处理开发通常使用VBA,但是VBA有很多不足之处。首先,它只面对VB脚本语言,开发环境显得简单,不够强大;其次,VBA把代码分别嵌入到每个文档中去,这导致万一出现bug,或者项目需要升级时,就很难处理。需要对于每个文档进行修改,这种低效率在企业级应用中是无法容忍的;还有,VBA的另一个问题是安全保护做得很薄弱,很多人可以利用宏制造病毒。
VSTO (Visual Studio Tools for Office) 是基于.NET 框架的Office 开发技术。它最大的特点是完全与.NET结合,在开发过程中可以不受限制地使用.NET 的各种技术,同时还保留了COM 组件开发方式中对Office 程序的强大控制[2] ,是实现Office 智能文档的高效、安全的工具[3-4]。
使用VSTO对系统的Word操作进行程序控制,可以进行辅助项目的填写,无需借助于VBA,VSTO生成的模块是系统的一部分,用户不避再去保存多个文档模板,从而达到文档管理的一体化。对于用户来说,面对的只是一个整体上的软件系统。
使用VSTO会产生被呼叫方拒绝接收呼叫的问题,这是由于多线程调用跨越Com边界造成的,IoleMessageFilter对频繁的请求无法及时回应,导致呼叫拒绝,可以采用重载IoleMessageFilter接口重新定义回应方法的方式来解决。关键代码如下:
public class MessageFilter : IOleMessageFilter
{ public static void Register()
{IOleMessageFilter newFilter = new MessageFilter();
IOleMessageFilter oldFilter = null;
int ntemp = CoRegisterMessageFilter(newFilter, out oldFilter);
}public static void Revoke()
{IOleMessageFilter oldFilter = null;
int ntemp = CoRegisterMessageFilter(null, out oldFilter);
}int IOleMessageFilter.HandleInComingCall(int dwCallType,
System.IntPtr hTaskCaller, int dwTickCount, System.IntPtr
lpInterfaceInfo)
{return 0;
}// 线程调用被拒绝,重试
int IOleMessageFilter.RetryRejectedCall(System.IntPtr
hTaskCallee, int dwTickCount, int dwRejectType)
{if (dwRejectType == 2)
{return 99;
}return -1;
}int IOleMessageFilter.MessagePending(System.IntPtr hTaskCallee,
int dwTickCount, int dwPendingType)
{return 2;}
3 数据交换安全加密技术
文档数据交换的安全是很重要的。文档在数据交换过程中一旦发生数据泄露,会给当事双方带来难以估量的损失。因此,文档管理一体化系统在设计上就必然要保证文档数据交换的安全性。
文档加密安全可采用如图1所示的加密方案,先采用RC4 128为加密,再在输出文档的时候对文件进行AES256位加密。这样得到安全度很高的密文文件。RC4是一种流密码算法,它对数据的每个字节进行操作,与RC2算法一样,它支持长度为40位、64位以及128位的密钥,算法的速度可以达到DES加密的10倍左右,且具有很高级别的非线性[5]。高级加密标准(Advanced Encryption Standard,AES),在密码学中又称Rijndael加密法,是美國联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。[6] 。256位密钥长度的AES算法是被证明是非常安全的。
经过这两层加密的密文理论上是无法在有效时间内被攻破的,但是这里就涉及到密钥的安全管理。如果密钥被窃取,文档就会泄密,如何保护密钥是非常重要的。采用软件加密锁的方式是一种低成本合理的解决方式。此对程序采用加密狗的方式进行保护。软件加密锁(俗称加密狗)是一种加密安全强度最好的加密产品,所谓加密锁,就是一个安装在计算机并口或USB口上的一种特殊硬件,应用软件通过和这个硬件的通讯来确保软件不被盗版。
为了使密钥更加安全,可以设计算法来进行密钥的动态变更,由于RC4算法涉及到文档的正常编辑,因此,不易频繁变更,但是AES256位加密是对输出文档的全文加密,可以进行密钥的变更。就应用而言,一个月更新一次密钥就可以了。这里主要是服务器端对文档的解密的设计相对复杂一些,因为必须保存历史密钥序列。
4 加密解密时间优化的策略
AES256位文档加密在文档较大的时候耗费时间较长,随着文件的增大,时间消耗显著呈线性增长。实测数据如表1所示:
这说明随着文件的增大,AES256位加密算法消耗的时间将按照式1线性增长,当文件达到100M以上的时候,消耗的时间将使终端用户无法忍受。
如果降低算法加密强度,虽然可以减少时间,但是安全度下降。在安全度不降也就是算法不变的条件下,为了减少加密消耗时间,根据式1,只能削减文件大小。而对于一个大型Word文件,可能只有部分内容是敏感内容需要加密,其他部分则无需加密,在这种情况下可以采取对文档部分加密的策略来减少加密的时间。加密算法如图3。
通过书签对文档规格化,不仅可以在查询统计的时候利用书签快速提取到相关内容,也可以让用户通过书签列表来标识哪些是需要加密的文档部分,哪些是不需要加密的部分。部分加密的文档在解密的时候获得同样的时间效率。例如一个100M的文档实际上只有10M左右的内容需要加密处理,那么时间就由442秒降低到45秒,这样终端用户就可以接受了。
5 结束语
本文针对文档管理一体化系统涉及到的重要的关键技术进行了研究,包括Word进程与Windows窗体的融合技术、基于VSTO技术的Word文档处理技术、数据交换安全加密技术和加解密时间优化策略,提出了相应的解决办法,其中Word进程的处理数据和交换安全加密技术等技术问题的解决可以较好的促进文档管理一体化系统的实际应用,加密解密时间优化的策略需要限定部分保护的使用条件,如果文档需要全部保护,则需要考虑其他方式的时间优化策略,需要将来进一步研究。
参考文献:
[1] 国家自然科学基金委员会.2013年度报告[EB/OL].http://www.nsfc.gov.cn/nsfc/cen/ndbg/2013ndbg/05/02.html.
[2] 苑青,孔捷,冷静.利用VSTO和.NET的Office开发技术[J].电脑编程技巧与维护,2009(6):10-11.
[3] 顾晟,陈波.基于VSTO的智能文档在企业环保信息调查系统中的应用[J].计算机系统应用,2010(1):114-116.
[4] 关巍.利用VSTO实现文档的智能化[J].电脑与电信,2006(6):56-58.
[5] 百度百科.RC4算法[EB/OL].http://baike.baidu.com/view/542025.htm.
[6] 維基百科.高级加密标准[EB/OL].http://zh.wikipedia.org/wiki/高级加密标准.