一种水印嵌入与检测方法及装置与流程

文档序号:19156493发布日期:2019-11-16 00:51阅读:199来源:国知局
一种水印嵌入与检测方法及装置与流程

本申请涉及版权保护技术领域,尤其涉及一种水印嵌入与检测方法及装置。



背景技术:

随着社会的文明进步,人们的版权意识也逐渐增强,为了保护版权拥有者的合法权益,水印技术应运而生,水印技术是指将版权合法拥有者的标识和合法拥有时间等信息嵌入到版权文件中,以实现防伪溯源及版权保护的技术。

现有技术中,先对待嵌入版权文件中的水印进行划分得到多份子水印,之后再按照子水印的划分顺序将这多份子水印依次嵌入到版权文件的各行中,以保证后续可以检测到顺序正确的完整水印,这样,针对嵌入子水印的每一行,除了需要在该行嵌入子水印,还需要在该行写入嵌入有子水印的下一行的行号,而一般水印所占的空间都比较小,记录行号也需要占用相应的空间,因此,会增加水印的容量开销,不适用于冗余空间有限的版权文件。

并且,如果不法分子获取到一部分子水印,就可以根据行号很容易地获取到完整的水印,水印的隐蔽性也不好。



技术实现要素:

本申请实施例提供一种水印嵌入与检测方法及装置,用以解决现有技术中的水印嵌入方法会增加水印的容量开销,不适用于冗余空间有限的版权文件、且水印的隐蔽性不好的问题。

第一方面,本申请实施例提供的一种水印嵌入方法,包括:

获取版权文件和版权人提供的版权信息,其中,版权文件为各行内容之间不具有相互依赖关系的文本文件,之后,基于版权信息和当前的时间戳信息,生成待嵌入版权文件中的水印,进而将至少一份水印嵌入到版权文件中,其中,版权文件中任一行嵌入的为子水印,该子水印是对所述水印进行分割得到的,且是根据该行的文本内容、哈希算法和子水印份数确定的,并可以利用哈希算法确定版权文件中每一行文本内容对应的字符,再根据各行文本内容对应的字符、水印对应的字符串和预设的水印隐藏规则,将水印信息隐藏在版权文件中,这样,后续在进行水印检测时可以根据隐藏的水印信息对从版权文件中提取的水印的正确性进行验证。

采用上述方案,先对水印进行分割得到多份子水印,之后,在任一行嵌入一份子水印,且该份子水印是根据该行的文本内容、哈希算法和子水印份数确定的,这样,不需按照子水印的顺序来嵌入子水印,并且不需要在行中预留行号空间,因此,可以节省水印的容量开销。此外,因为不要求各行嵌入的子水印之间必须具有前后连续关系,所以即使不法分子获取到一部分水印,也不能轻易地得到完整的水印信息,水印的隐蔽性也比较好。

在一种可能的实施方式下,可以将版权信息和时间戳信息进行组合,之后,再对组合后的版权信息和时间戳信息进行加密、编码,得到待嵌入版权文件中的水印。

采用上述方式,嵌入到版权文件中的水印是经过加密处理的,可以增强水印的安全性、提高水印的抗攻击性。

在一种可能的实施方式下,可以根据每行嵌入的水印长度对水印进行分割,并对分割得到的子水印进行编号,之后,针对版权文件中待嵌入子水印的每一行,利用该行的文本内容、哈希算法和子水印份数确定待嵌入到该行的子水印的编号,将与该编号对应的子水印嵌入到该行。

这样,针对版权文件中待嵌入子水印的每一行,利用该行的文本内容、哈希算法和子水印份数确定待嵌入到该行的子水印的编号,再将与该编号对应的子水印嵌入到该行,不需按照子水印的编号顺序来嵌入子水印,并且不需要在行中预留行号空间,可以节省水印的容量开销。

在一种可能的实施方式下,对版权文件中待嵌入子水印的每一行,可以根据以下公式确定待嵌入到该行的子水印的编号k:

k=chash%k;

其中,chash为该行中前s位文本内容的哈希值,s为大于零的整数;k为对所述水印进行分割得到的子水印份数。

采用上述方式,可以保证各份子水印均匀地嵌入到版权文件中。

在一种可能的实施方式下,每一子水印中包含的字符均为可见字符,则在将任一编号对应的子水印嵌入到相应行中时,可以根据预设的可见字符与不可见字符之间的转换规则,将子水印中的每一可见字符转换为不可见字符,得到子水印对应的不可见字符串,进而将不可见字符串嵌入到该行中的指定位置。

采用上述方式,在版权文件中嵌入的水印皆为不可见字符,不会改变版权文件的可读性,对版权文件的影响比较小。

在一种可能的实施方式下,对版权文件中的每一行,可以利用哈希算法确定该行文本内容的哈希值,进而将该哈希值与预设值进行异或运算,确定异或运算的结果为该行文本内容对应的字符。

在一种可能的实施方式下,可以根据各行文本内容对应的字符、水印对应的字符串和预设的水印隐藏规则,对版权文件进行行交换,其中,水印隐藏规则为:交换后版权文件中连续若干行对应的字符组成的字符串为水印对应的字符串,且起始行之前连续m行的字符组成的字符串为预设的用于标识水印起始位的字符串、结束行之后连续n行的字符组成的字符串为预设的用于标识水印结束位的字符串,其中,起始行是指所述连续若干行中的第一行,结束行是指所述连续若干行中的最后一行,m和n均为大于零的整数。

采用上述方案,为版权文件中的每一行赋予一个字符,之后,可以根据各行对应的字符和水印对应的字符串,对版权文件中的行进行交换,从而将实际应该嵌入到版权文件中的水印隐藏在版权文件中,便于后续进行检测水印时验证从版权文件中提取的水印的正确性,并且,隐藏水印时,在版权文件中没有增加任何信息,因此,对版权文件的冗余空间要求也比较小。

第二方面,本申请实施例提供的一种水印嵌入装置,包括:

获取模块,用于获取版权文件和版权人提供的版权信息,所述版权文件为各行内容之间不具有相互依赖关系的文本文件;

生成模块,用于基于所述版权信息和当前的时间戳信息,生成待嵌入所述版权文件中的水印;

嵌入模块,用于将至少一份所述水印嵌入到所述版权文件中,其中,所述版权文件中任一行嵌入的为子水印,所述子水印是对所述水印进行分割得到的,且是根据该行的文本内容、哈希算法和子水印份数确定的;

隐藏模块,用于利用哈希算法确定所述版权文件中每一行文本内容对应的字符,根据各行文本内容对应的字符、所述水印对应的字符串和预设的水印隐藏规则,将水印信息隐藏在所述版权文件中。

本申请第二方面中任一种设计方式所带来的技术效果可参见第一方面中不同实现方式所带来的技术效果,此处不再赘述。

第三方面,本申请实施例提供的一种水印检测方法,包括:

获取版权文件,所述版权文件为各行内容之间不具有相互依赖关系的文本文件,之后,利用哈希算法确定版权文件中每一行文本内容对应的字符,进而根据各行文本内容对应的字符和预设的水印隐藏规则,确定在版权文件中隐藏的水印,并提取版权文件中嵌入的水印,其中,从版权文件中任一行提取的为子水印,子水印是对所述水印进行分割得到的,且是根据该行的文本内容、哈希算法和子水印份数确定的,若确定提取的水印与隐藏的水印相同,则可以解析任一水印得到版权人的版权信息和版权人开始拥有所述版权文件时的时间戳信息。

采用上述方案,可以同时获取到应该嵌入到版权文件中的水印和实际嵌入到版权文件中的水印,只有两份水印相同时,才说明水印检测是正确的,因此,当确定提取的水印与隐藏的水印相同,再解析水印得到版权人的版权信息,可保证追溯到的版权文件传播源的可信度。

在一种可能的实施方式下,对版权文件中的每一行,利用哈希算法确定该行文本内容的哈希值,之后,将哈希值与预设值进行异或运算,确定异或运算的结果为该行文本内容对应的字符。

在一种可能的实施方式下,根据各行文本内容对应的字符和预设的水印隐藏规则,确定版权文件中连续m行对应的字符组成的字符串为用于标识水印起始位的字符串,且连续n行对应的字符组成的字符串为用于标识水印结束位的字符串时,将m行和n行之间各行对应的字符组成的字符串,确定为隐藏在版权文件中的水印,其中,m和n均为大于零的整数。

采用上述方式,版权文件中的每一行文本内容对应一个字符,利用这些字符、以及预设的用于标识水印结束位的字符串和用于标识水印结束位的字符串,就可以找到隐藏在版权文件中的水印,方便快捷。

在一种可能的实施方式下,针对版权文件中嵌入子水印的每一行,根据预设的水印嵌入位置和每行嵌入的水印长度,确定嵌入到该行的子水印,并利用该行的文本内容、哈希算法和子水印份数确定嵌入到该行的子水印的编号,进而根据嵌入到各行的子水印和子水印的编号,确定嵌入到版权文件中的水印。

在一种可能的实施方式下,嵌入到版权文件中的每一子水印中包含的字符均为不可见字符,则可以根据预设的水印嵌入位置和每行嵌入的水印长度,从该行中分割出子水印对应的不可见字符串,进而根据预设的可见字符与不可见字符之间的转换规则,将字符串中的每一不可见字符转换为可见字符,将得到的可见字符串确定为嵌入到该行中的子水印。

在一种可能的实施方式下,对版权文件中嵌入子水印的每一行,可以根据以下公式确定嵌入到该行的子水印的编号k:

k=chash%k;

其中,chash为该行中前s位文本内容的哈希值,s为大于零的整数;k为对所述水印进行分割得到的子水印份数。

在一种可能的实施方式下,针对每一编号,可以统计出现次数最多的子水印,将该子水印确定为与该编号对应的子水印,进而按照编号从小到大的顺序,将各子水印进行拼接,得到嵌入到版权文件中的水印。

采用上述方式,即使水印被部分篡改或者去除,也不影响水印的正确提取,并且也可以对版权文件进行有效保护。

在一种可能的实施方式下,对水印进行解码、解密得到组合后的版权信息和时间戳信息,之后,再对组合后的版权信息和时间戳信息进行拆分得到版权人的版权信息和时间戳信息。

第四方面,本申请实施例提供的一种水印检测装置,包括:

获取模块,用于获取版权文件,所述版权文件为各行内容之间不具有相互依赖关系的文本文件;

确定模块,用于利用哈希算法确定所述版权文件中每一行文本内容对应的字符,根据各行文本内容对应的字符和预设的水印隐藏规则,确定在所述版权文件中隐藏的水印;

提取模块,用于提取所述版权文件中嵌入的水印,其中,从所述版权文件中任一行提取的为子水印,所述子水印是对所述水印进行分割得到的,且是根据该行的文本内容、哈希算法和子水印份数确定的;

解析模块,用于若确定提取的水印与隐藏的水印相同,则解析任一水印得到版权人的版权信息和版权人开始拥有所述版权文件时的时间戳信息。

本申请第四方面中任一种设计方式所带来的技术效果可参见第三方面中不同实现方式所带来的技术效果,此处不再赘述。

第五方面,本申请实施例提供的一种计算机,包括至少一个处理单元、以及至少一个存储单元,其中,所述存储单元存储有程序代码,当所述程序代码被所述处理单元执行时,使得所述计算机执行上述水印嵌入和/或水印检测方法的步骤。

第六方面,本申请实施例提供的一种计算机可读存储介质,包括程序代码,当所述程序代码在计算机上运行时,使所述计算机执行上述水印嵌入和/或水印检测方法的步骤。

本申请的这些方面或其它方面在以下实施例的描述中会更加简明易懂。

附图说明

图1为本申请实施例提供的水印嵌入方法的应用场景示意图;

图2为本申请实施例提供的水印嵌入方法流程图;

图3为本申请实施例提供的又一水印嵌入方法流程图;

图4为本申请实施例提供的水印检测方法流程图;

图5为本申请实施例提供的一种基于大数据平台的水印嵌入和提取系统的示意图;

图6为本申请实施例提供的再一水印嵌入方法的流程图;

图7为本申请实施例提供的又一水印检测方法的流程图;

图8为本申请实施例提供的水印嵌入装置的结构图;

图9为本申请实施例提供的水印检测装置的结构图;

图10为本申请实施例提供的用于实现水印嵌入和/或水印检测方法的计算机的硬件结构示意图。

具体实施方式

为了解决现有技术中的水印嵌入方法会增加水印的容量开销,不适用于冗余空间有限的版权文件、且水印的隐蔽性不好的问题,本申请实施例提供了一种水印嵌入与检测方法及装置。

首先需要说明的是,本申请实施例中提及的版权文件为文本文件,且文本文件中各行文本内容之间彼此独立、不具有相互依赖关系,如csv文件,在对该类版权文件中的各行文本内容进行互换时,不会影响版权文件中文本内容的正确性和可读性。

参见图1,图1示出了本申请实施例提供的水印嵌入方法的应用场景示意图,图中包括终端11和服务器12,终端如私人电脑、ipad、手机等,服务器可以为任何能够提供互联网服务的设备。

具体实施时,用户(版权文件的原始拥有者)通过终端将待嵌入水印的版权文件和合法购买者的版权信息上传至服务器,并请求服务器将合法购买者的版权信息嵌入到版权文件中,服务器在接收到版权文件和合法购买者的版权信息后,可以根据版权信息和当前的时间戳信息,生成待嵌入版权文件中的水印,之后,将至少一份水印嵌入到版权文件中。

具体地,可以根据每行嵌入的水印长度对水印进行分割,得到多份子水印,之后,针对版权文件中待嵌入子水印的每一行,根据该行的文本内容、哈希算法和子水印份数确定待嵌入到该行的子水印,这样,利用哈希算法、每一行的文本内容和子水印份数确定嵌入到该行的子水印,不要求嵌入到各行中的子水印之间必须具有前后连续关系,即在嵌入子水印的行中不必再写入下一个嵌入子水印行的行号信息,因此,向版权文件中嵌入水印时所需的空间比较小,更加适用于冗余空间有限的版权文件,并且,由于各行嵌入的子水印之间不具有前后连续关系,所以即使不法分子获取到一部分水印,也不能轻易地得到完整的水印信息,水印的隐蔽性也比较好。

并且,服务器还可以利用哈希算法确定版权文件中每一行文本内容对应的字符,进而根据各行文本内容对应的字符和水印对应的字符串将水印信息隐藏在版权文件中,以便后续在对版权文件进行水印检测时,可以根据隐藏的水印信息对从版权文件中提取的水印的正确性进行验证,这里,将实际需要嵌入到每一版权文件中的水印信息隐藏在该版权文件中,而不必在服务器侧逐一记录,可以降低服务器的压力。

实际应用中,由于大数据平台的分布式数据处理机制,使得版权文件经大数据平台处理后无法保证数据顺序与原有顺序保持一致,而目前已有的水印嵌入与检测方法严格依赖原始数据的记录顺序,因此,不适用于大数据平台。而本申请实施例提供的水印嵌入与检测方法,对版权文件中文件内容的记录顺序没有要求,因此,非常适用于大数据平台。

需要说明的是,上述应用场景仅是为了便于相关人员理解本申请的精神和原理,并不构成对本申请实施方式应用场景的限制。

以下结合说明书附图对本申请的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本申请,并不用于限定本申请,并且在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

如图2所示,为本申请实施例提供的水印嵌入方法流程图,包括以下步骤:

s201:获取版权文件和版权人提供的版权信息,其中,版权文件为各行内容之间不具有相互依赖关系的文本文件。

其中,版权人提供的版权信息可用于标识一个购买者,如购买者的手机号、身份证等。

s202:基于版权信息和当前的时间戳信息,生成待嵌入版权文件中的水印。

其中,当前的时间戳信息可作为版权人开始拥有版权文件时的时间。

具体地,将版权信息和时间戳信息进行组合,之后对组合后的版权信息和时间戳信息进行加密、编码,将得到的字符串作为待嵌入版权文件中的水印。

s203:将至少一份水印嵌入到版权文件中,其中,版权文件中任一行嵌入的为子水印,该子水印是对所述水印进行分割得到的,且是根据该行的文本内容、哈希算法和子水印份数确定的。

为了提高后续水印检测时的准确性和效率,可以指定水印的冗余度,水印的冗余度决定了在版权文件中嵌入的水印份数。一般地,水印的冗余度可以根据版权文件的行数来确定,版权文件的行数越多,水印的冗余度越大;版权文件的行数越少,水印的冗余度也越小。

具体实施时,首先,根据每行嵌入的水印长度对水印进行分割,并对分割得到的子水印从零开始进行编号。

比如,水印对应的字符串为:111000011100,每行嵌入水印的固定长度为4,那么该水印可以分割出3份子水印,分别为:1110、0001、1100,这些子水印对应的编号依次为0、1、2。

其次,针对版权文件中待嵌入子水印的每一行,利用该行的文本内容、哈希算法和子水印份数确定待嵌入到该行的子水印的编号。

比如,对版权文件中待嵌入子水印的每一行,可以根据以下公式确定待嵌入到该行的子水印的编号k:

k=chash%k;

其中,chash为该行中前s位文本内容的哈希值,s为大于零的整数;k为对水印进行分割得到的子水印份数。

进一步地,将与该编号对应的子水印嵌入到该行。

实际应用中,每一子水印中包含的字符均为可见字符,在将与任一编号对应的子水印嵌入到该行时,可以根据预设的可见字符与不可见字符之间的转换规则,将子水印中的每一可见字符转换为不可见字符,得到子水印对应的不可见字符串,进而将不可见字符串嵌入到该行中的指定位置,这样,可以增强水印的隐蔽性,并且,可以减小对版权文件的影响。

s204:利用哈希算法确定版权文件中每一行文本内容对应的字符,根据各行文本内容对应的字符、水印对应的字符串和预设的水印隐藏规则,将水印信息隐藏在版权文件中,以便在进行水印检测时根据隐藏的水印信息对从版权文件中提取的水印的正确性进行验证。

具体实施时,可以根据以下步骤确定版权文件中每一行文本内容对应的字符:

对版权文件中的每一行,利用哈希算法确定该行文本内容的哈希值,进而将该哈希值与预设值进行异或运算,将异或运算的结果确定为该行文本内容对应的字符。

比如,可以根据以下公式确定每一行文本内容对应的字符i:

其中,lhash为该行文本内容的哈希值。

进一步地,根据各行文本内容对应的字符、水印对应的字符串和预设的水印隐藏规则,对版权文件进行行交换,这里,水印隐藏规则为:交换后版权文件中连续若干行对应的字符组成的字符串为水印对应的字符串,且起始行之前连续m行对应的字符组成的字符串为预设的用于标识水印起始位的字符串、结束行之后连续n行对应的字符组成的字符串为预设的用于标识水印结束位的字符串,其中,起始行是指所述连续若干行中的第一行,结束行是指所述连续若干行中的最后一行,m和n均为大于零的整数,并且,m和n的取值可以相同。

以标识水印开始位的字符串为m个1、标识水印结束位的字符串为n个0为例,上述过程可以按照以下步骤执行:

第一步:随机数生成器生成伪随机数,根据此伪随机数选取版权文件中的开始行i。

第二步:从第i行开始,对版权文件进行行交换,使i~i+m行文本内容对应的字符全部变为1,从i+m+1~i+m+lwm行文本内容对应的字符所顺序组成的字符串为水印对应的字符串,从i+m+lwm+1~i+m+n+lwm+1行文本内容对应的字符全部变为0时,完成水印的隐藏,其中,lwm为水印长度。

需要说明的是,上述步骤s203和s204之间并没有确定的先后执行顺序。

下面结合具体的实施例对上述过程进行详细说明。

服务器获取到版权文件和版权人提供的版权信息后,可以将版权信息和系统自动生成的当前时间戳信息串联成固定长度的明文字符串,再对明文字符串采用对称加密、编码后生成由0、1构成的二进制字符串,将该二进制字符串确定为待嵌入到版权文件中的水印。

进一步地,确定嵌入到版权文件中的水印冗余度,并按照每行固定嵌入的水印长度对水印字符串进行划分,得到多份子水印字符串,并对每一份子水印字符串进行编号,之后,针对待嵌入水印的每一行,确定该行待嵌入的子水印字符串的编号,将该编号对应的子水印字符串映射为不可见字符串,进而在该行的行尾嵌入该不可见字符串。

具体地,上述过程可以按照图3所示的流程进行:

s301:对水印进行划分,并对划分得到的每一份子水印按顺序进行编号。

具体地,根据公式:k=lwm/l,将水印划分为k份,并对划分得到的k份子水印进行编号,其中,lwm为水印字符串的长度,l为每行嵌入的水印长度。

s302:读取版权文件中一个待嵌入子水印的行,确定待嵌入到该行的子水印的编号。

具体地,计算行中固定位置之前文本内容的哈希值chash,将chash对子水印份数k进行取模运算,得到待嵌入到该行的子水印的编号:k=chash%k。

s303:将该编号对应的子水印串映射为不可见字符串,并将不可见字符串嵌入到该行的行尾。

比如,某子水印对应的二进制字符串为:1001,预设的可见字符与不可见字符之间的映射规则为:0—>空格,1—>tab,则1001映射后的不可见字符串为:tab空格空格tab,之后,将该不可见字符串嵌入到行尾。

s304:判断版权文件中是否还存在待嵌入子水印的行,若是,返回s302;否则,结束水印嵌入。

这里,假设水印的冗余度为r,则嵌入到版权文件中的子水印总份数为:n=k*r,之后,只需根据一定的行选择规则从版权文件中选取相应数量的行即可进行子水印的嵌入操作。

其中,行选择规则如:每隔5行嵌入一个子水印,或者每隔10行之后,在接下来的3行中都嵌入子水印。在此仅是举例,并不构成对本申请中确定待嵌入子水印行的限制。

并且,可以利用哈希算法确定版权文件中每一行文本内容对应的字符,之后,根据各行文本内容对应的字符、水印对应的字符串和预设的水印隐藏规则将水印信息隐藏在版权文件中。

比如,水印对应的字符串为:111000011100,此时,水印长度lwm为12,假设水印起始位的字符串为:1111,水印结束位的字符串为:0000,此时,m=n=4。

那么,确定版权文件中的开始行i之后,可以根据各行文本内容对应的字符和水印对应的字符串对版权文件中的行进行交换,使i~i+4行文本内容对应的字符全部为1,从i+4+1~i+4+lwm行文本内容对应的字符顺序组成的字符串为111000011100,从i+4+lwm+1~i+2*4+lwm+1行文本内容对应的字符全部为0。

如图4所示,为本申请实施例提供的水印检测方法流程图,包括以下步骤:

s401:获取版权文件,其中,版权文件为各行内容之间不具有相互依赖关系的文本文件。

s402:利用哈希算法确定版权文件中每一行文本内容对应的字符,根据各行文本内容对应的字符和预设的水印隐藏规则,确定在版权文件中隐藏的水印。

具体地,利用哈希算法确定版权文件中每一行文本内容对应的字符,包括:

对版权文件中的每一行,利用哈希算法确定该行文本内容的哈希值,进而将该哈希值与预设值进行异或运算,确定异或运算的结果为该行文本内容对应的字符。

比如,可以根据以下公式计算每一行文本内容对应的字符i:

其中,lhash为该行文本内容的哈希值。

进一步地,根据各行文本内容对应的字符和预设的水印隐藏规则,确定版权文件中连续m行文本内容对应的字符顺序组成的字符串为用于标识水印起始位的字符串,且连续n行文本内容的对应的字符顺序组成的字符串为用于标识水印结束位的字符串时,将m行和n行之间各行文本内容对应的字符顺序组成的字符串确定为隐藏在版权文件中的水印,其中,m和n均为大于零的整数,且m和n的取值可以相同。

以水印开始位的字符串为m个1、水印结束位的字符串为n个0为例,在逐行检测各行文本内容对应的字符时,若确定从某行i开始,i~i+m行文本内容对应的字符全部为1,i+m+lwm+1~i+m+n+lwm+1行文本内容对应的字符全部为0,则可以将i+m+1~i+m+lwm行文本内容对应的字符所顺序组成的字符串确定为水印对应的字符串。

s403:提取版权文件中嵌入的水印,其中,从版权文件中任一行提取的为子水印,子水印是对所述水印进行分割得到的,且是根据该行的文本内容、哈希算法和子水印份数确定的。

具体实施时,针对版权文件中嵌入子水印的每一行,可以根据预设的水印嵌入位置和每行嵌入的水印长度,确定嵌入到该行的子水印。

具体地,针对版权文件中嵌入子水印的每一行,根据预设的水印嵌入位置和每行嵌入的水印长度,从该行中分割出子水印对应的不可见字符串,进而根据预设的可见字符与不可见字符之间的转换规则,将不可见字符串中的每一不可见字符转换为可见字符,将得到的可见字符串确定为嵌入到该行中的子水印。

并且,可以利用该行的文本内容、哈希算法和子水印份数确定嵌入到该行的子水印的编号。

比如,对版权文件中嵌入水印的每一行,可以根据以下公式确定嵌入到该行的子水印的编号k:

k=chash%k;

其中,chash为该行中前s位文本内容的哈希值,s为大于零的整数;k为对水印进行分割得到的子水印份数。

进一步地,根据嵌入到各行的子水印和子水印的编号,确定嵌入到版权文件中的水印。

具体地,针对每一编号,统计出现次数最多的子水印,将该子水印确定为与该编号对应的子水印,之后,按照编号从小到大的顺序,将各子水印进行拼接,得到嵌入到版权文件中的水印。

比如,编号0对应的子水印有多个,但出现次数最多的为1110,则可以将1110确定为编号0唯一对应的子水印;编号1对应的子水印同样有多个,但出现次数最多的为0001,则可以将0001确定为编号1唯一对应的子水印;编号2对应的子水印也有多个,但出现次数最多的为1100,则可以将1100确定为编号2唯一对应的子水印,进而按照编号从小到大的顺序将1110、0001、1100串起来,得到水印字符串:111000011100。

这是因为,实际应用中,嵌入到版权文件中的子水印有可能会被恶意删除、或者部分误删,由此可能导致提取出的子水印种类超过原始划分的种类,为了解决该问题,本申请实施例中,针对每一编号,将出现次数最多的子水印确定为其对应的子水印,这样,即使水印被部分篡改或者去除,也不影响水印的正确提取,并且也可以对版权文件进行有效保护。

s404:若确定提取的水印与隐藏的水印相同,则解析任一水印得到版权人的版权信息和版权人开始拥有版权文件时的时间戳信息。

具体地,对任一水印进行解码、解密得到组合后的版权信息和时间戳信息,并对组合后的版权信息和时间戳信息进行拆分、得到版权人的版权信息和版权人开始拥有版权文件时的时间戳信息。

需要说明的是,上述步骤s402和s403之间并没有确定的先后执行顺序。

本申请实施例中,隐藏在版权文件中的水印是实际上应该嵌入到版权文件中的水印,提取到的水印是实际嵌入到版权文件中的水印,只有当二者相同时,才说明检测到的水印是正确的,因此,当确定二者相同时,再解析水印获取版权人信息,可以确保根据版权人信息所追溯到的版权文件散播源的可靠性。

下面结合具体的实施例对上述过程进行详细介绍。

服务器获取到版权文件后,可以利用哈希算法计算每行文本内容对应的字符,当检测到用于标识水印起始位的字符串时,记录之后各行文本内容对应的字符,直到检测到用于标识水印结束位的字符串时停止,将记录下的字符顺序组成的字符串作为待比较的水印字符串。

以标识水印起始位的字符串为m个1,标识水印结束位的字符串为m个0为例,当服务器检测到版权文件中连续m行对应的字符为1,则从下一行开始将该行对应的字符记录下来,直到检测到连续m行对应的字符为0时,停止检测,进而将记录下的字符顺序组成的字符串作为待比较的二进制字符串。

比如,对版权文件中的每一行,可以根据以下公式计算该行文本内容对应的字符i:

其中,lhash为该行文本内容的哈希值。

进一步地,对版权文件中嵌入子水印的每一行,利用该行的文本内容、哈希算法和子水印份数确定嵌入到该行的子水印的编号,并将行末的不可见字符转换为可见的二进制字符,之后,针对每一编号,统计出现次数最多的子水印,将该子水印确定为与该编号对应的子水印,再按照编号从小到大的顺序将这些子水印进行拼接,得到实际嵌入到版权文件中的水印。

具体实施时,上述过程可以按照以下步骤执行:

第一步:逐行读取版权文件中的文本内容,确定在该行嵌入的子水印和子水印的编号。

具体地,针对版权文件中的每一行,检测行末是否存在不可见字符,若存在,则将该行的文本内容部分和末尾的不可见水印字符部分进行分割,之后,计算该行前s位文本内容的哈希值chash,进而计算该行嵌入的子水印的编号k=chash%k,其中,k为对水印进行分割得到的子水印份数。

并且,将行末的不可见水印字符部分转换为可见的二进制字符串,将该字符串作为第k份子水印进行存储。

第二步:根据在各行嵌入的子水印和子水印的编号,确定在版权文件中嵌入的水印。

具体地,针对每一编号,统计出现次数最多的子水印,将该子水印作为与该编号对应的子水印,之后,按照编号从小到大的顺序将这些子水印串联起来,就可以得到在版权文件中嵌入的水印字符串。

进一步地,若确定待比较的水印字符串和在版权文件中嵌入的水印字符串相同,则可以采用对称密码算法对任一二进制水印字符串进行解密,将解密后的明文字符串进行反编码后得到明文水印要素信息,该信息中包括版权人提供的版权信息和版权人开始拥有版权文件时的时间信息,其中,版权人开始拥有版权文件时的时间信息可以用嵌入水印时的系统时间戳信息来表示。

如图5所示,为本申请实施例提供的一种基于大数据平台的水印嵌入和提取系统的示意图,包括水印嵌入模块和水印提取模块,其中:

水印嵌入模块,包括水印生成单元和水印嵌入单元,其中,水印生成单元用于将水印信息串转换为二进制水印字符串;水印嵌入单元,用于将二进制水印字符串嵌入到版权文件中。

水印提取模块,包括水印提取单元和水印恢复单元,其中,水印提取单元用于将嵌入版权文件中的二进制水印字符串提取出来;水印恢复单元,用于将二进制水印字符串转换为水印信息串,得到版权文件的版权信息。

对应于图5,图6为本申请实施例提供的再一水印嵌入方法的流程图,包括:

s601:根据版权人提供的版权信息和当前时间戳,生成二进制水印字符串。

具体地,将版权人提供的版权信息和系统自动生成的当前时间戳信息,串联成固定长度的明文字符串,对该明文字符串采用高级加密标准(advancedencryptionstandard,aes)对称加密、以及base64编码后生成由0、1字符构成的二进制水印字符串。

s602:对水印进行划分得到多份子水印,并对每一子水印进行编号。

s603:读取版权文件中一个待嵌入子水印的行,并确定嵌入到该行的子水印的编号。

可选地,可以计算该行前5位文本内容的md5值hmd5,将hmd5对子水印份数k进行取模运算,得到嵌入到该行的子水印的编号。

s604:将该编号对应的二进制子水印串映射为不可见字符串,并将不可见字符串嵌入该行的末尾。

s605:判断版权文件中是否还存在待嵌入子水印的行,若是,则返回s603;否则,进入s606。

s606:确定行交换时开始行的行号。

比如,利用随机数生成器生成伪随机数i,将i作为开始行号。

s607:基于开始行的行号,对版权文件进行行交换。

具体地,将i~i+m行的值全部交换为1,从i+m+1~i+m+lwm行的值交换为二进制水印编码值,从i+m+lwm+1~i+2*m+lwm+1行的值全部交换为0,结束水印嵌入,其中,m为设定的用于标识水印起始字符串和结束字符串的长度。

对应于图5,图7为本申请实施例提供的又一水印检测方法的流程图,包括:

s701:确定版权文件中隐藏的水印。

具体地,逐行读入版权文件的文本内容,确定该行文本内容对应的字符,如果检测到连续m行的值为1,从下一行开始将的值记录下来,直到检测到连续m行的值为0时,停止检测,将记录下的二进制字符串记为watermark1(即隐藏的水印)。

s702:确定各行嵌入的子水印和子水印的编号。

可选地,在逐行读入版权文件的文本内容时,还可以检测行末是否存在不可见字符,若存在,则将该行的文本内容部分和末尾的不可见水印字符部分进行分割。

进一步地,对前5位文本内容计算md5值hmd5,再计算嵌入到该行的子水印的编号k=hmd5%k,其中,k为子水印份数。

并且,将本行的不可见水印字符部分转换为二进制串,作为第k份子水印进行存储,直至整个文件读取完毕。

s703:根据各行嵌入的子水印和子水印的编号,确定嵌入到版权文件中的水印。

具体地,针对每一编号,统计出现次数最多的子水印,将该子水印作为与该编号对应的子水印,之后,按照编号从小到大的顺序将子水印组合,得到完整的二进制水印字符串,记为watermark2。

s704:判断隐藏的水印与提取的水印是否相同,若是,则进入s705;否则,确定水印检测失败。

即,比较watermark1与watermark2是否相同,若相同,则输出watermark1或watermark2。

s705:解析任一水印得到水印要素信息。

具体地,对输出的二进制水印字符串进行aes对称解密、base64反编码得到原始的明文水印要素信息,再对其进行拆分可以得到版权信息和时间戳信息。

针对大数据平台纯文本文件中数据的记录顺序不固定,冗余空间有限的特点,本申请实施例提供的水印嵌入方法将不可见字符嵌入版权文本,与数据的记录的顺序无关,所需的水印空间较小,因此,对大数据平台中的纯文本文件具有很强的适用性。

基于同一发明构思,本申请实施例中还提供了一种与水印嵌入方法对应的水印嵌入装置,由于该装置解决问题的原理与本申请实施例水印嵌入方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。

如图8所示,为本申请实施例提供的水印嵌入装置的结构图,包括:

获取模块801,用于获取版权文件和版权人提供的版权信息,所述版权文件为各行内容之间不具有相互依赖关系的文本文件;

生成模块802,用于基于所述版权信息和当前的时间戳信息,生成待嵌入所述版权文件中的水印;

嵌入模块803,用于将至少一份所述水印嵌入到所述版权文件中,其中,所述版权文件中任一行嵌入的为子水印,所述子水印是对所述水印进行分割得到的,且是根据该行的文本内容、哈希算法和子水印份数确定的;

隐藏模块804,用于利用哈希算法确定所述版权文件中每一行文本内容对应的字符,根据各行文本内容对应的字符、所述水印对应的字符串和预设的水印隐藏规则,将水印信息隐藏在所述版权文件中。

在一种可能的实施方式下,所述生成模块802具体用于:

将所述版权信息和时间戳信息进行组合;

对组合后的版权信息和时间戳信息进行加密、编码,得到待嵌入版权文件中的水印。

在一种可能的实施方式下,所述嵌入模块803具体用于:

根据每行嵌入的水印长度对所述水印进行分割,并对分割得到的子水印进行编号;

针对所述版权文件中待嵌入子水印的每一行,利用该行的文本内容、哈希算法和子水印份数确定待嵌入到该行的子水印的编号,将与所述编号对应的子水印嵌入到该行。

在一种可能的实施方式下,对所述版权文件中待嵌入子水印的每一行,所述嵌入模块803具体用于根据以下公式确定待嵌入到该行的子水印的编号k:

k=chash%k;

其中,chash为该行中前s位文本内容的哈希值,s为大于零的整数;k为对所述水印进行分割得到的子水印份数。

在一种可能的实施方式下,每一子水印中包含的字符均为可见字符;所述嵌入模块803具体用于:

根据预设的可见字符与不可见字符之间的转换规则,将所述子水印中的每一可见字符转换为不可见字符,得到所述子水印对应的不可见字符串;

将所述不可见字符串嵌入到该行中的指定位置。

在一种可能的实施方式下,所述隐藏模块804具体用于:

对所述版权文件中的每一行,利用哈希算法确定该行文本内容的哈希值;

将所述哈希值与预设值进行异或运算,确定异或运算的结果为该行文本内容对应的字符。

在一种可能的实施方式下,所述隐藏模块804具体用于:

根据各行文本内容对应的字符、所述水印对应的字符串和预设的水印隐藏规则,对所述版权文件进行行交换,所述水印隐藏规则为:交换后版权文件中连续若干行对应的字符组成的字符串为所述水印对应的字符串,且起始行之前连续m行的字符组成的字符串为预设的用于标识水印起始位的字符串、结束行之后连续n行的字符组成的字符串为预设的用于标识水印结束位的字符串,其中,起始行是指所述连续若干行中的第一行,结束行是指所述连续若干行中的最后一行,m和n均为大于零的整数。

同样地,本申请实施例中还提供了一种与水印检测方法对应的水印检测装置,由于该装置解决问题的原理与本申请实施例水印检测方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。

如图9所示,为本申请实施例提供的水印嵌入装置的结构图,包括:

获取模块901,用于获取版权文件,所述版权文件为各行内容之间不具有相互依赖关系的文本文件;

确定模块902,用于利用哈希算法确定所述版权文件中每一行文本内容对应的字符,根据各行文本内容对应的字符和预设的水印隐藏规则,确定在所述版权文件中隐藏的水印;

提取模块903,用于提取所述版权文件中嵌入的水印,其中,从所述版权文件中任一行提取的为子水印,所述子水印是对所述水印进行分割得到的,且是根据该行的文本内容、哈希算法和子水印份数确定的;

解析模块904,用于若确定提取的水印与隐藏的水印相同,则解析任一水印得到版权人的版权信息和版权人开始拥有所述版权文件时的时间戳信息。

在一种可能的实施方式下,所述确定模块902具体用于:

对所述版权文件中的每一行,利用哈希算法确定该行文本内容的哈希值;

将所述哈希值与预设值进行异或运算,确定异或运算的结果为该行文本内容对应的字符。

在一种可能的实施方式下,所述确定模块902具体用于:

根据各行文本内容对应的字符和预设的水印隐藏规则,确定所述版权文件中连续m行对应的字符组成的字符串为用于标识水印起始位的字符串,且连续n行对应的字符组成的字符串为用于标识水印结束位的字符串时,将所述m行和n行之间各行对应的字符组成的字符串,确定为隐藏在所述版权文件中的水印,其中,m和n均为大于零的整数。

在一种可能的实施方式下,所述提取模块903具体用于:

针对所述版权文件中嵌入子水印的每一行,根据预设的水印嵌入位置和每行嵌入的水印长度,确定嵌入到该行的子水印,并利用该行的文本内容、哈希算法和子水印份数确定嵌入到该行的子水印的编号;

根据嵌入到各行的子水印和子水印的编号,确定嵌入到所述版权文件中的水印。

在一种可能的实施方式下,嵌入到所述版权文件中的每一子水印中包含的字符均为不可见字符;所述提取模块903具体用于:

根据预设的水印嵌入位置和每行嵌入的水印长度,从该行中分割出子水印对应的不可见字符串;

根据预设的可见字符与不可见字符之间的转换规则,将所述字符串中的每一不可见字符转换为可见字符,将得到的可见字符串确定为嵌入到该行中的子水印。

在一种可能的实施方式下,对所述版权文件中嵌入子水印的每一行,所述提取模块903具体用于根据以下公式确定嵌入到该行的子水印的编号k:

k=chash%k;

其中,chash为该行中前s位文本内容的哈希值,s为大于零的整数;k为对所述水印进行分割得到的子水印份数。

在一种可能的实施方式下,所述提取模块903具体用于:

针对每一编号,统计出现次数最多的子水印,将该子水印确定为与该编号对应的子水印;

按照编号从小到大的顺序,将各子水印进行拼接,得到嵌入到所述版权文件中的水印。

在一种可能的实施方式下,所述解析模块904具体用于:

对所述水印进行解码、解密得到组合后的版权信息和时间戳信息;

对组合后的版权信息和时间戳信息进行拆分得到所述版权信息和时间戳信息。

如图10所示,为本申请实施例提供的用于实现水印嵌入或水印检测方法的计算机的硬件结构示意图,包括处理器1010、通信接口1020、存储器1030和通信总线1040,其中,处理器1010,通信接口1020,存储器1030通过通信总线1040完成相互间的通信。

存储器1030,用于存放计算机程序;

处理器1010,用于执行存储器1030上所存放的程序时,使得计算机执行上述水印嵌入或水印检测方法的步骤。

本申请实施例提供的一种计算机可读存储介质,包括程序代码,当所述程序代码在计算机上运行时,使计算机执行上述水印嵌入和/或水印检测方法的步骤。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1