一种通用的文本水印方法和装置与流程

allin2023-05-03  43



1.本发明属于文档保护和图像处理技术领域,涉及一种数字水印的嵌入与提取方法和装置,尤其涉及了一种通用的文本水印方法和装置。


背景技术:

[0002][0003]
在现有的文本水印技术中,为了提高水印算法抵抗打印扫描、屏幕截屏和屏幕拍照等恶意攻击的鲁棒性能,基于字符拓扑结构修改的文本数字水印技术成为主流。即通过将特定字符进行不同形式的变形后对应不同的水印信息位串,字符变形数据会保存在特定的水印字库中,并在电子文本文档打印输出和屏幕显示的过程中,通过字体替换来实现水印信息的嵌入。因此,水印信息的实时加载是基于字体替换的文本水印技术的关键步骤。目前主要通过以下方式实现字库的加载和水印信息嵌入:1)通过钩子hook技术。为了能够实时替换字体信息,需要事先获取文本文件的内容数据。一般通过系统钩子来截获文件的特定操作,然后获取中间格式文件数据,进行字体替换操作后完成水印信息嵌入,最后再执行正常文件操作。比如通过hook电子文本文件的打印操作,可以完成在文档正常打印输出的过程中实时嵌入水印信息;或者在截获文件的打开操作,完成特定文件格式内容数据的解析,并执行字体类型替换嵌入水印信息,最后再打开嵌入水印信息的电子文件。2)通过软件插件机制。为了能够在特定的文件格式内容中替换字库并嵌入水印信息,可以开发相应的软件插件模块完成文件内容解析。比如基于微软office办公软件的vba(visual basic for applications)宏或者vsto (visual studio tools for office)技术,实现doc、docx、excel或ppt等常见办公格式文件中的水印信息嵌入。当上述格式的电子文件被打开或者打印输出时,office插件会调用软件系统提供的接口完成对电子文件内容解析和修改,从而进行字库类型替换后完成水印信息嵌入。
[0004]
但是上述方法都存在很多问题和缺陷:1)通用差的问题。比如基于hook技术可以很好地完成文件打印操作过程中的水印信息嵌入,但是很难截获电子文件的屏幕显示操作,无法在屏幕显示内容中实时进行水印信息嵌入;而基于软件插件机制的嵌入方法又跟特定的软件系统相关,并不是所有的软件系统都提供了二次开发接口,相关的局限性更大。2)另外现有方法的实现过程比较复杂,尤其基于网页浏览器的插件开发难度更大。3)使用hook技术的稳定性较差,跟系统软件的兼容性问题较多,安全性能较低。4)目前的水印嵌入算法针对每一页文档数据采用顺序冗余的方式进行水印嵌入,这就要求水印信息内容具有局部完整性。因此,水印算法抵抗裁剪、揉搓、污损和撕裂等恶意攻击的性能比较差。针对上述问题,本发明提供了一种通用性的文本水印解决方案。


技术实现要素:

[0005]
本发明提供一种基于动态字库生成的通用性文本水印嵌入和提取的方法和装置,在不改变用户任何使用习惯的前提下,用以解决现有技术中水印加载通用性差、系统稳定
性差、实现过程复杂以及水印算法鲁棒性能低等问题。
[0006]
本发明的构思在于,首先,根据特定策略将选定字库中一定数目的字符进行均匀分组,每个分组中的所有字符都代表相同的水印信息位串;根据特定规则对每个分组中的所有字符进行变形设计,分别得到每个字符所对应的多个水印字符轮廓曲线数据,并生成水印字符数据临时文件;根据特定规则生成用户终端水印编码数据,用以标识用户终端的身份认证信息;根据水印编码数据,通过水印字符数据临时文件动态生成水印字库文件,该水印字库文件跟系统安装的同名字库文件具有相同属性;实时加载水印字库文件并替换系统安装的同名字库文件;运行电子格式的文本文件,在文件打印输出和屏幕显示的文档内容数据中实时嵌入水印信息;获取隐藏有水印信息的文档图片数据,并进行水印信息提取,进而进行文档泄密源头追溯。从而得到了一种通用的文本水印嵌入和提取的方法和装置。
[0007]
本发明中一种通用的文本水印方法,包括文本水印嵌入和提取方法,其中文本水印嵌入包括如下步骤:
[0008]
步骤一,根据特定策略对选定字库中一定数目的字符进行分组;
[0009]
步骤二,根据特定规则对每个分组中的所有字符进行变形设计,并生成水印字符数据临时文件;
[0010]
步骤三,生成用户终端水印编码数据,用以标识用户终端的身份认证信息;
[0011]
步骤四,依据水印编码数据,并结合水印字符数据临时文件和分组的字符,动态生成并实时加载水印字库文件;
[0012]
步骤五,运行电子格式的文本文件,在文件打印输出和屏幕显示的文档内容数据中利用水印字库文件实时嵌入水印信息。
[0013]
进一步地,该方法还包括文本水印提取步骤,即步骤六:获取隐藏有水印信息的文档图片数据,并进行水印信息提取,进而进行文档泄密源头追溯。
[0014]
较佳地,所述的对选定字库中一定数目的字符进行分组的方法为:
[0015]
首先,按照字频统计结果从高到低对常见字符进行排序,并获取前n个字符组成水印字符集
[0016]
接着,将n个字符初步划分为m组,该m组记为{ω1,ω1,

,ωm},其中m《n,并且使得任意的0《i,j≤m,i≠j,具体分组过程为:
[0017]
step1.先按照字频顺序选取前m个字符依次分到{ω1,ω1,

,ωm}个各组中,每个分组中增加一个字符;
[0018]
step2.再次选取m个字符按照相反的顺序{ωm,ω
m-1
,

,ω1}依次在每个分组中增加一个字符;
[0019]
step3.重复执行step1和step2直至n个字符分组完毕。
[0020]
然后,随机选取一定数量的文本训练语料,并将每一份文本训练语料的字符数固定在t 个;
[0021]
最后,统计所有分组{ω1,ω1,

,ωm}中的字符在t个文本训练语料中出现的概率,并根据概率分布对分组结果进行优化得到最终的分组{ω
′1,ω
′2,


′m}。
[0022]
较佳地,所述的根据概率分布对分组结果进行优化得到最终的分组,方法为:
[0023]
step1,计算每个分组ωi,1≤i≤m中的字符在t个文本训练语料中出现的概率,并
将所有的概率按照从大到小的顺序进行排序;
[0024]
step2,从概率最高的分组中取出字频最小的字符移动到概率最低的分组中,从概率次高的分组中取出字频次小的字符移动到概率次低的分组中,依次重复该过程直至移动全部完成;
[0025]
step3,再次重复执行step1和step2,直至所有分组的概率方差达到最小,从而得到最终的分组{ω
′1,ω
′2,


′m}。
[0026]
较佳地,所述的对每个分组中的所有字符进行变形设计,是指将字符的矢量轮廓曲线数据进行调整得到d个不同的变形,d≥2,不同的轮廓曲线变形代表不同的水印信息位串;
[0027]
较佳地,所述的水印信息位串,每个分组中的所有字符都代表相同的水印信息位串。
[0028]
较佳地,所述的生成水印字符数据临时文件,是指将设计生成的字符变形轮廓曲线数据连同字符属性描述信息一起保存在临时文件中,字符属性描述信息包括字体框的宽度、字体框的高度、每个字形在字体框中的偏移量,其中偏移量会随着字形结构的不同从而发生变化。
[0029]
较佳地,所述的生成用户终端水印编码数据,水印编码数据包括用户终端的身份认证信息和时间信息,具体生成方法包括手工指定和自动分配方式。
[0030]
较佳地,所述的自动分配方式,方法为:
[0031]
step1.在系统后台创建用户终端身份标识信息记录表,信息内容包括用户id、用户登录账号、机器mac地址、机器ip地址信息,其中用户id是后台系统自动分配并自增的,其余信息为客户端监控程序自动提交。
[0032]
step2.运行客户端监控程序,自动获取用户终端身份标识信息并上传至系统后台,当上传的标识信息在系统后台数据库记录表中存在时,则直接返回用户id信息,否则,在系统后台数据库中增加一条新的记录,并将用户id加1后返回给客户端。
[0033]
step3.客户端监控程接收到系统后台返回的用户id信息后,实时读取系统操作时间,将用户id信息和时间信息进行纠错编码化处理后得到最终的用户终端水印编码数据。
[0034]
较佳地,所述的纠错编码化处理,是指针对长度len的水印信息位串,len为8的倍数,采用奇偶校验的方式进行水印信息纠错编码处理后得到完整的水印编码数据,具体过程为:将水印信息位串排成len/8行、8列的矩阵;计算每一列信息的奇偶检验码构成第len/8+1行,则有效的信息码与校验码的总长度是len+8。
[0035]
较佳地,所述的动态生成并实时加载水印字库文件,动态生成水印字库文件是指打开水印字符数据临时文件,根据分组策略和用户终端水印编码数据,动态地从水印字符数据临时文件中读取字形轮廓曲线数据,并更新系统安装的标准字库中相应的字形结构数据。
[0036]
较佳地,所述的动态生成并实时加载水印字库文件,实时加载水印字库文件是指根据 windows和linux操作系统的不同,分别完成水印字库的加载:
[0037]
1)windows环境。
[0038]
首先,调用系统api函数removefontresource(pctstr lpfilename)将系统安装的标准字库从系统字体表中去除;发送一个wm_fontchang消息给系统中的所有顶层窗口,通
知这个变化;然后再调用addfontresource(lpctstr lpszfilename)函数将动态生成的水印字库文件资源添加至系统字体表,以供windows应用程序正常使用。
[0039]
2)linux环境。
[0040]
通过从相应的文件夹中删除字体文件来卸载系统安装的标准字体。当删除全局字体时,发出fc-cache-fv命令来更新系统的字体缓存。再将动态生成的水印字库文件拷贝至相应的文件目录中,并发出fc-cache-fv命令使系统知道更改。当fc-cache完成时,系统上的所有用户都可以访问新添加的全局字体。
[0041]
较佳地,所述的进行水印信息提取,主要包括三个步骤:
[0042]
1)根据字符分组在文档内容中的分布情况,分别提取每个分组内的所有字符所代表的水印信息位串;
[0043]
2)利用水印信息位串奇偶校验法则,对初步提取的水印信息位串进行校验和纠错;
[0044]
3)最后将所有分组提取得到的水印信息位串拼接得到最终的完整水印信息位串。
[0045]
基于同一发明构思,本发明还提供了一种通用的文本水印装置,包括:
[0046]
字符分组模块:负责根据特定策略对选定字库中一定数目的字符进行分组;
[0047]
字形设计模块:负责根据特定规则,对字符分组模块处理的每个分组中的所有字符进行变形设计,并生成水印字符数据临时文件;
[0048]
水印编码生成模块:负责生成用户终端水印编码数据,用以标识用户终端的身份认证信息;
[0049]
字库生成和加载模块:依据水印编码生成模块生成的水印编码数据,并结合字形设计模块处理生成的水印字符数据临时文件和字符分组模块处理得到的分组字符,负责动态生成并实时加载水印字库文件;
[0050]
水印嵌入模块:负责运行电子格式的文本文件,在文件打印输出和屏幕显示的文档内容数据中利用字库生成和加载模块生成并加载的水印字库文件实时嵌入水印信息;
[0051]
水印提取模块:负责获取水印嵌入模块处理后得到的隐藏有水印信息的文档图片数据,并进行水印信息提取,进而进行文档泄密源头追溯。
[0052]
本发明的有益效果如下:
[0053]
由于本发明中,根据唯一的用户终端水印编码数据信息,在客户端动态生成个性化的水印字库,且每个水印字库嵌入了唯一的id标识信息。当不同的客户端的用户身份信息不同时,水印字库嵌入的水印信息也不同。而水印字库被实时加载后,客户端所有调用本地字库进行打印输出和屏幕显示的应用软件系统则实时在文件内容嵌入了水印信息。因此,本发明所述的文本水印方法的通用性强,兼容性好,稳定性高,水印信息嵌入过程简单。另外,由于采用分组无序的嵌入策略,文本水印方法抵抗裁剪、揉搓、污损和撕裂等恶意攻击的鲁棒性能更高。
附图说明
[0054]
图1为实施例中所述的一种通用的文本水印嵌入和提取方法的实施流程示意图;
[0055]
图2为弓形分组方法示意图;
[0056]
图3为水印字符数据临时文件结构图;
[0057]
图4为本实施例所述方法中的水印信息纠错编码示意图;
[0058]
图5为水印字库动态生成过程示意图;
[0059]
图6为实施例中所述的一种通用的文本水印嵌入和提取的装置结构示意图。
具体实施方式
[0060]
为使本发明的上述目的、特征和优点能够更加明显易懂,下面通过具体实施例和附图,对本发明做进一步详细说明。
[0061]
图1为实施例中所述的一种通用的文本水印嵌入和提取方法的实施流程示意图。
[0062]
s101,根据特定策略对选定字库中一定数目的字符进行分组。
[0063]
在本发明中,为了实现通用性的水印信息嵌入,我们在每个客户端动态生成了唯一的个性化水印字库,即不同的客户端生成的水印字库是不同的(这个有别于现有任何的技术方案,即现有技术方案中每个客户端生成安装的水印字库都是相同的),每个水印字库中嵌入了相应的用户终端身份认证信息。水印字库生成后被实时动态加载并替换操作系统中预先安装的标准字库,当客户端所有调用水印字体的应用软件系统进行电子文档屏幕显示和打印输出操作时,水印信息被自动实时嵌入至文档内容中。因此,该水印方法的通用性强,实现过程简单,并且跟系统及其他应用软件的兼容性好。但是为了保证足够的信息容量和水印提取的效率,我们通过一组字符来代表特定的水印位串,即该分组中的所有字符代表的水印信息位串都相同。当每个分组中至少有一个字符出现在文本内容中时,相应的水印信息位串就可以被正确提取。因此,我们按照特定策略将选定字库中的一定数量的字符进行合理分组,从而保证每个分组中的字符在文本内容中出现的概率相对较高。
[0064]
具体的分组方法为:
[0065]
首先,按照字频统计结果从高到低对常见字符进行排序,并获取前n个字符组成水印字符集在本实施例中,n=2000。
[0066]
接着,将n个字符初步划分为m组{ω1,ω1,

,ωm},其中m《n,并且使得任意的},其中m《n,并且使得任意的0《i,j≤m,i≠j,在本实施例中,m=28。
[0067]
具体分组过程为:
[0068]
step1.先按照字频顺序选取前m个字符依次分到{ω1,ω1,

,ωm}个各组中,每个分组中增加一个字符。
[0069]
step2.再次选取m个字符按照相反的顺序{ωm,ω
m-1
,

,ω1}依次在每个分组中增加一个字符。
[0070]
step3.重复执行step1和step2直至n个字符分组完毕。
[0071]
经过如图2所示的弓形分组方法初步得到了m组{ω1,ω1,

,ωm},比如分在第一组的字符集合为:
[0072][0073]
然后,随机选取一定数量的文本训练语料,并将每一份文本训练语料的字符数固定在t 个,在本实施例中t=200。为了验证每组字符在常见文本文档中出现的概率值,需要收集大量的样本进行训练测试。为此,我们通过互联网爬虫方式下载了近50万篇文章,其中涵盖了政治、军事、新闻、体育、文化、历史、财经等领域。将采集的每篇文章经过内容过滤和
裁剪操作后保存为200字的文本训练语料。
[0074]
最后,统计所有分组{ω1,ω1,

,ωm}中的字符在t个文本训练语料中出现的概率,并根据概率分布对分组结果进行优化得到最终的分组{ω
′1,ω
′2,


′m}。
[0075]
由于上述方法中仅仅采用了基于字频排序的结果进行分组操作,在实际的文本语料训练过程中,也可能会出现概率分布不均匀的情况,因此需要进行特定的优化操作以得到更均衡的分组。具体的分组优化方法为:
[0076]
step1,计算每个分组ωi,1≤i≤m中的字符在训练语料中出现的概率,并将所有的概率按照从大到小的顺序进行排序;
[0077]
step2,从概率最高的分组中取出字频最小的字符移动到概率最低的分组中,从概率次高的分组中取出字频次小的字符移动到概率次低的分组中,依次重复该过程直至移动全部完成;
[0078]
step3,再次重复执行step1和step2,直至所有分组的概率方差达到最小,从而得到最优的分组{ω
′1,ω
′2,


′m}。
[0079]
s102,根据特定规则对每个分组中的所有字符进行变形设计,并生成水印字符数据临时文件。
[0080]
所述的字符变形设计特征,是指将字符的矢量轮廓曲线数据进行调整得到d个不同的变形, d≥2,不同的轮廓曲线变形代表不同的水印信息位串。为了能够有效提升水印信息容量,字符变形的数量通常会超过2个,在本实施例中,d=4。即每个字符有4种不同变形,则代表 2位水印信息位串。另外,需要说明的是每个分组中的所有字符都代表相同的水印信息位串。
[0081]
将上述设计生成的字符变形轮廓曲线数据连同字符属性描述信息一起保存在临时文件中,字符属性描述信息包括字体框的宽度、字体框的高度、每个字形在字体框中的偏移量,其中偏移量会随着字形结构的不同从而发生变化。在临时文件中,每个字形数据的存储结构如图 3所示。具体的信息描述如下:
[0082]
字符的unicode编码:在临时文件中为该字形结构所代表的字符分配一个唯一的 unicode编码;
[0083]
水平布局:包括字形外边框的宽度、字形轮廓线最左边的点到字形左边框的距离;
[0084]
垂直布局:包括字形外边框的高度、字形轮廓线最顶端的点到字形上边框的距离;
[0085]
图元数据的大小:表示字形结构的矢量轮廓曲线数据的容量大小,单位为字节;
[0086]
图元数据:byte类型的数组,存储具体的字形结构的矢量轮廓曲线数据,还包括网格的定义以及相关指令数据。
[0087]
s103,生成用户终端水印编码数据,用以标识用户终端的身份认证信息。
[0088]
为了有效地实现对客户端泄密事件的追踪溯源,需要为用户终端生成唯一的水印编码数据信息,内容包括用户终端的身份认证信息和时间信息,具体生成方法包括手工指定和自动分配方式。手工指定方式是指在客户端系统安装部署时,手工为客户端指定唯一的编码信息。而所述的自动分配水印编码数据特征,方法为:
[0089]
step1.在系统后台创建用户终端身份标识信息记录表,信息内容包括用户id、用户登录账号、机器mac地址、机器ip地址信息,其中用户id是后台系统自动分配并自增的,其余信息为客户端监控程序自动提交;
[0090]
step2.运行客户端监控程序,自动获取用户终端身份标识信息并上传至系统后台,当上传的标识信息在系统后台数据库记录表中存在时,则直接返回用户id信息,否则,在系统后台数据库中增加一条新的记录,并将用户id加1后返回给客户端。
[0091]
step3.客户端监控程接收到系统后台返回的用户id信息后,实时读取系统操作时间,将用户id信息和时间信息进行纠错编码化处理后得到最终的用户终端水印编码数据。
[0092]
针对长度len的水印信息位串,len为8的倍数,采用奇偶校验的方式进行水印信息纠错编码处理后得到完整的水印编码数据,具体过程为:将水印信息位串排成len/8行、8列的矩阵;计算每一列信息的奇偶检验码构成第len/8+1行,则有效的信息码与校验码的总长度是len+8。在本实施例中,取len=48,水印信息位串的排列方式如图4所示,前6行为有效的水印信息位串,最后一行(图中灰色标注的部分)的每一列的信息均是该信息所在列的前 6行信息位串的奇偶校验码,这样最终得到的水印编码数据量为56位。而在本实施例中选择 28个分组,每个分组代表2位的水印信息,正好可以嵌入56位的水印编码数据。
[0093]
s104,依据水印编码数据动态生成并实时加载水印字库文件。
[0094]
动态生成水印字库过程,是指打开水印字符数据临时文件,根据分组策略和水印编码信息,动态从临时文件中读取字形轮廓曲线数据,并更新系统安装的标准字库中相应的字形结构数据。具体过程如图5所示。
[0095]
step1.首先,需要解析系统安装标准字库文件的关键数据,包括字体信息头、最大需求表、命名表、字体编码映射表、图元位置索引表、字体的水平布局度量表及垂直布局度量表、图元数据等;
[0096]
step2.读取包含水印字符轮廓曲线数据的临时文件;
[0097]
step3.初始化空的字体编码映射表m和图元位置索引表s、水平布局度量表h和垂直布局度量表v,同时生成一个空的图元数据文件tmp用于存储矢量的图元数据信息;
[0098]
step4.依次写入每一个字符数据,设当前处理第i个字符,前面已经处理过的所有i-1个字符对应的图元数据的数据量为dws
i-1
,则图元位置索引表中第i-1项的值s
i-1
=dws
i-1
,此时,第i个字符处理过程如下:
[0099]
1)根据字符在字库中代表的unicode编码更新字体编码映射表m;
[0100]
2)从临时文件中读取字符的水平及垂直布局信息、新图元的数据量dwn,及新图元的矢量轮廓数据,并更新至目标水印字库的相应表中;
[0101]
3)更新目标水印字库文件的图元位置索引表为:si=s
i-1
+dwn;
[0102]
4)将从临时文件中读取的图元数据保存到图元数据文件tmp中。
[0103]
step5.按照字体文件的结构依次写入字体文件头信息及相关属性值信息、字体编码映射表、图元位置索引表、水平及垂直布局度量表,最后将图元数据文件tmp中保存的所有图元数据写入新生成字库的图元数据区域中,生成新的水印字库文件。
[0104]
如前所述,根据水印编码信息生成水印字库后,需要更新至操作系统的字体资源表才能完成应用软件系统对水印字库的正确调用。根据操作系统不同,水印字库的加载过程分为以下两种情况:
[0105]
1)windows环境。
[0106]
首先,调用系统api函数removefontresource(pctstr lpfilename)将系统安装的标准字库从系统字体表中去除;发送一个wm_fontchang消息给系统中的所有顶层窗口,通
知这个变化;然后再调用addfontresource(lpctstr lpszfilename)函数将动态生成的水印字库文件资源添加至系统字体表,以供windows应用程序正常使用。
[0107]
2)linux环境。
[0108]
通过从相应的文件夹中删除字体文件来卸载系统安装的标准字体。当删除全局字体时,发出fc-cache-fv命令来更新系统的字体缓存。再将动态生成的水印字库文件拷贝至相应的文件目录中,并发出fc-cache-fv命令使系统知道更改。当fc-cache完成时,系统上的所有用户都可以访问新添加的全局字体。
[0109]
s105,运行电子格式的文本文件,在文件打印输出和屏幕显示的文档内容数据中实时嵌入水印信息。
[0110]
如前所述,在本发明中,通过动态生成水印字库文件并更新至操作系统的字体表中,以替代操作系统安装的标准字库文件,使得系统的应用程序自动调用新加载的水印字库文件,从而完成水印信息的实时嵌入。
[0111]
s106,获取隐藏有水印信息的文档图片数据,并进行水印信息提取,进而进行文档泄密源头追溯。
[0112]
所述的水印信息提取过程主要包括三个步骤:
[0113]
1)根据字符分组在文档内容中的分布情况,分别提取每个分组内的所有字符所代表的水印信息位串;
[0114]
2)利用水印信息位串奇偶校验法则,对初步提取的水印信息位串进行校验和纠错;
[0115]
3)最后将所有分组提取得到的信息串拼接得到最终的完整水印信息位串。
[0116]
其中需要说明的是,同一个字符出现在文档内容中不同位置时,所代表的水印信息位串是相同的,在文档内容中出现的同属于一个分组的所有字符所代表的水印信息也是相同的。在水印信息提取时,为了考虑处理的效率,会限定每个分组中水印字符提取“个次”阈值p,即在每个分组中最多提取p次水印信息。当该分组中的同一个字符出现的次数超过p,或者所包含的字符数目超过p时,水印提取过程只运行p次。否则,将针对所有出现的字符进行水印提取操作。
[0117]
如图6所示,基于同一发明构思,本发明还提供了一种通用的文本水印嵌入和提取装置,包括:
[0118]
字符分组模块1:负责根据特定策略对选定字库中一定数目的字符进行分组;
[0119]
字形设计模块2:负责根据特定规则,对字符分组模块处理的每个分组中的所有字符进行变形设计,并生成水印字符数据临时文件;
[0120]
水印编码生成模块3:负责生成用户终端水印编码数据,用以标识用户终端的身份认证信息;
[0121]
字库生成和加载模块4:依据水印编码生成模块生成的水印编码数据,并结合字形设计模块生成的水印字符数据临时文件和字符分组模块处理得到的分组字符,负责动态生成并实时加载水印字库文件;
[0122]
水印嵌入模块5:负责运行电子格式的文本文件,在文件打印输出或屏幕显示文档内容时,利用字库生成和加载模块生成并加载的水印字库文件实时嵌入水印信息;
[0123]
水印提取模块6:负责获取水印嵌入模块处理后得到的隐藏有水印信息的文档图
片数据,并进行水印信息提取,进而进行文档泄密源头追溯。
[0124]
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
[0125]
比如,为了防止动态生成的水印字库被恶意篡改,或者由于用户重新安装相关字体对水印字库带来的破坏,在客户端部署安装水印字库检测服务程序。检测服务程序计算新生成水印字库文件的sha1值,并记录在系统台账中。检测服务程序定时扫描正在加载的水印字库文件,计算当前水印字库文件的sha1值,并与系统台账中记录的值进行比较。若不同,则水印字库文件被毁坏,重新执行水印字库生成和加载过程。
[0126]
比如,生成的用户终端水印编码数据中包含用户终端的身份认证信息和时间信息。为了能够精确记录每天不同的时间信息,则同样可以在客户端部署安装水印字库生成时间信息监控程序。当操作系统重启时,监控程序执行水印字库动态生成和实时加载工作,并记录当前水印字库生效时间。操作系统在正常运行期间,监控程序定时检测水印字库生效时间。若当前时间跟生效时间不在同一天,则监控程序重新执行动态生成和实时加载工作,并再次更新水印字库生效时间。
[0127]
比如,为了提高用户终端水印字库的动态生成效率,在客户端部署安装水印字库生成时间信息监控程序,根据不同的时间段事先生成相应的水印字库。当操作系统系统重启时,监控程序根据系统当前的时间段选择相应的水印字库文件,并执行水印字库文件的拷贝和实时加载工作,然后删除已使用的过期水印字库文件。
[0128]
比如,在字符分组优化过程中,还可以通过拆分词语的方式进一步优化分组策略。例如,在第一个分组中同时出现了字符“目”和“的”,而词语“目的”是一个高频词,也就是说在正常文本内容中,“目”和“的”同时出现的概率比较大。因此,可以将字频相对较低的“目”字移动到当前优化阶段中概率较低的分组,从而可以得到更加概率均衡化的分组结果。
[0129]
比如,在实施例1所述的水印字库生成方法中,只是将每个字符的其中一个轮廓曲线变形数据更新至标准字符编码区域,这样系统应用软件才能正常使用而不产生任何乱码显示等问题。当把每个字符的所有字符变形的轮廓曲线数据拷贝至字库的扩展编码区域,并分别给每个字符变形分配一个唯一的unicode编码,在文档打印输出或者外发管理的过程中通过动态替换字符编码,则可以实现在字符较少的文本内容中嵌入更多的水印信息,从而提高了水印信息容量。

技术特征:
1.一种通用的文本水印方法,其特征在于,包括以下步骤:根据特定策略对选定字库中一定数目的字符进行分组;根据特定规则对每个分组中的所有字符进行变形设计,并生成水印字符数据临时文件;生成用户终端水印编码数据,用以标识用户终端的身份认证信息;依据水印编码数据,并结合水印字符数据临时文件和分组的字符,动态生成并实时加载水印字库文件;运行电子格式的文本文件,在文件打印输出和屏幕显示的文档内容数据中利用水印字库文件实时嵌入水印信息。2.根据权利要求1所述的方法,其特征在于,还包括以下步骤:获取隐藏有水印信息的文档图片数据,并进行水印信息提取,进而进行文档泄密源头追溯。3.根据权利要求1或2所述的方法,其特征在于,所述的对选定字库中一定数目的字符进行分组,包括:首先,按照字频统计结果从高到低对常见字符进行排序,并获取前n个字符组成水印字符集接着,将n个字符初步划分为m组,记为{ω1,ω1,


m
},其中m<n,并且使得任意的具体分组过程包括:step1.先按照字频顺序选取前m个字符依次分到{ω1,ω1,


m
}个各组中,每个分组中增加一个字符;step2.再次选取m个字符按照相反的顺序{ω
m

m-1
,

,ω1}依次在每个分组中增加一个字符;step3.重复执行step1和step2直至n个字符分组完毕;然后,随机选取一定数量的文本训练语料,并将每一份文本训练语料的字符数固定在t个;最后,统计所有分组{ω1,ω1,


m
}中的字符在t个文本训练语料中出现的概率,并根据概率分布对分组结果进行优化得到最终的分组{ω
′1,ω
′2,



m
}。4.根据权利要求1或2所述的方法,其特征在于,所述的根据概率分布对分组结果进行优化得到最终的分组,包括:step1,计算每个分组ω
i
,1≤i≤m中的字符在t个文本训练语料中出现的概率,并将所有的概率按照从大到小的顺序进行排序;step2,从概率最高的分组中取出字频最小的字符移动到概率最低的分组中,从概率次高的分组中取出字频次小的字符移动到概率次低的分组中,依次重复该过程直至移动全部完成;step3,再次重复执行step1和step2,直至所有分组的概率方差达到最小,从而得到最终的分组{ω
′1,ω
′2,



m
}。5.根据权利要求1或2所述的方法,其特征在于,所述的对每个分组中的所有字符进行变形设计,是指将字符的矢量轮廓曲线数据进行调整得到d个不同的变形,d≥2,不同的轮
廓曲线变形代表不同的水印信息位串;每个分组中的所有字符都代表相同的水印信息位串;所述的生成水印字符数据临时文件,是指将设计生成的字符变形轮廓曲线数据连同字符属性描述信息一起保存在临时文件中,字符属性描述信息包括字体框的宽度、字体框的高度、每个字形在字体框中的偏移量,其中偏移量会随着字形结构的不同从而发生变化。6.根据权利要求1或2所述的方法,其特征在于,所述的用户终端水印编码数据,包括用户终端的身份认证信息和时间信息,采用手工指定或自动分配方式生成用户终端水印编码数据;所述的自动分配方式包括:step1.在系统后台创建用户终端身份标识信息记录表,信息内容包括用户id、用户登录账号、机器mac地址、机器ip地址信息,其中用户id是后台系统自动分配并自增的,其余信息为客户端监控程序自动提交;step2.运行客户端监控程序,自动获取用户终端身份标识信息并上传至系统后台,当上传的标识信息在系统后台数据库记录表中存在时,则直接返回用户id信息,否则,在系统后台数据库中增加一条新的记录,并将用户id加1后返回给客户端;step3.客户端监控程接收到系统后台返回的用户id信息后,实时读取系统操作时间,将用户id信息和时间信息进行纠错编码化处理后得到最终的用户终端水印编码数据。7.根据权利要求6所述的方法,其特征在于,所述的纠错编码化处理,是指针对长度len的水印信息位串,len为8的倍数,采用奇偶校验的方式进行水印信息纠错编码处理后得到完整的水印编码数据,具体过程为:将水印信息位串排成len/8行、8列的矩阵;计算每一列信息的奇偶检验码构成第len/8+1行,则有效的信息码与校验码的总长度是len+8。8.根据权利要求1或2所述的方法,其特征在于,所述的动态生成并实时加载水印字库文件,动态生成水印字库文件是指打开水印字符数据临时文件,根据分组策略和用户终端水印编码数据,动态地从水印字符数据临时文件中读取字形轮廓曲线数据,并更新系统安装的标准字库中相应的字形结构数据;实时加载水印字库文件是指根据windows和linux操作系统的不同,分别完成水印字库的加载。9.根据权利要求2所述的方法,其特征在于,所述的进行水印信息提取,包括:根据字符分组在文档内容中的分布情况,分别提取每个分组内的所有字符所代表的水印信息位串;利用水印信息位串奇偶校验法则,对初步提取的水印信息位串进行校验和纠错;最后将所有分组提取得到的水印信息位串拼接得到最终的完整水印信息位串。10.一种采用权利要求1~9中任一权利要求所述方法的通用的文本水印装置,其特征在于,包括:字符分组模块,负责根据特定策略对选定字库中一定数目的字符进行分组;字形设计模块,负责根据特定规则,对字符分组模块处理的每个分组中的所有字符进行变形设计,并生成水印字符数据临时文件;水印编码生成模块,负责生成用户终端水印编码数据,用以标识用户终端的身份认证信息;字库生成和加载模块,负责依据水印编码生成模块生成的水印编码数据,并结合字形设计模块生成的水印字符数据临时文件和字符分组模块处理得到的分组字符,负责动态生成并实时加载水印字库文件;
水印嵌入模块,负责运行电子格式的文本文件,在文件打印输出或屏幕显示文档内容时,利用字库生成和加载模块生成并加载的水印字库文件实时嵌入水印信息;水印提取模块,负责获取水印嵌入模块处理后得到的隐藏有水印信息的文档图片数据,并进行水印信息提取,进而进行文档泄密源头追溯。

技术总结
本发明涉及一种通用的文本水印方法和装置。该方法的步骤包括:根据特定策略对选定字库中一定数目的字符进行分组;根据特定规则对每个分组中的所有字符进行变形设计,并生成水印字符数据临时文件;生成用户终端水印编码数据,用以标识用户终端的身份认证信息;依据水印编码数据,并结合水印字符数据临时文件和分组的字符,动态生成并实时加载水印字库文件;运行电子格式的文本文件,在文件打印输出和屏幕显示的文档内容数据中利用水印字库文件实时嵌入水印信息;获取隐藏有水印信息的文档图片数据,并进行水印信息提取,进而进行文档泄密源头追溯。本发明的文本水印方法的通用性强,兼容性好,稳定性高,水印信息嵌入过程简单。单。单。


技术研发人员:李公宝 丛升日
受保护的技术使用者:北京国隐科技有限公司
技术研发日:2022.01.27
技术公布日:2022/7/5
转载请注明原文地址: https://www.8miu.com/read-10973.html

最新回复(0)