一、概述
信息媒体的数字化为信息的存取提供了极大的方便,越来越多的业务现在都是基于网络信息完成的。与此同时,信息的泄露,篡改,盗版等也困扰这很多公司以及个人。那么如何降低这些风险或者说泄露了信息如何溯源呢?数字水印技术则在这方面提供了一系列追溯的功能,可以追溯信息在那个环节泄露。
数字水印技术由很多,基于多媒体图片,音频以及视频等技术研究比较深入,受限制于文本的特性,单独对文本的数字水印技术研究比较少,一般需要结合特定的文本格式进行解析。
如下是比较常见的文本水印技术。
(1)基于普通文本文件格式信息的技术,包括利用字符或者单词字移的技术、利用文本行距的行移技术、利用字符特征(字体、颜色、高度、宽度、笔画宽度、是否有下划线、是否为斜体等、字符拓扑结构)的技术等;
(2)基于不可见编码的技术,包括替换法、追加法、基于冗余编码的技术、字符的图形与编码相互独立的技术等; 基于文本内容的技术,包括同义词替换技术、基于句法的文本数字水印技术、基于语义的文本数字水印技术等;
(3)基于汉字结构的技术,包括利用偏旁部首的可组合的特性、字符内偏旁部首之间的距离的技术;
(4)基于图像水印技术的技术,包括基于各种空域、变换域的水印嵌入技术;
(5)基于特殊格式文件的技术,例如基于HTML、PDF等特殊文件格式的水印嵌入技术。
二、不可见编码的技术
那么如何单纯的只对文本进行水印技术编码呢?
上面第二点,可以基于”不可见编码的技术”对文本进行水印添加。
Unicode 中有一类格式字符,不可见,不可打印,主要作用于调整字符的显示格式,所以我们将其称为零宽字符。
零宽字符主要有以下几类:
零宽度空格符 (zero-width space) U+200B : 用于较长单词的换行分隔
零宽度非断空格符 (zero width no-break space) U+FEFF : 用于阻止特定位置的换行分隔
零宽度连字符 (zero-width joiner) U+200D : 用于阿拉伯文与印度语系等文字中,使不会发生连字的字符间产生连字效果
零宽度断字符 (zero-width non-joiner) U+200C : 用于阿拉伯文,德文,印度语系等文字中,阻止会发生连字的字符间的连字效果
左至右符 (left-to-right mark) U+200E : 用于在混合文字方向的多种语言文本中(例:混合左至右书写的英语与右至左书写的希伯来语),规定排版文字书写方向为左至右
右至左符 (right-to-left mark) U+200F : 用于在混合文字方向的多种语言文本中,规定排版文字书写方向为右至左
我们可以使用零宽字符的特性对文本进行水印加密。
三、实现
1、代码实现
package com.test.watermark;
/**
* @author 小白
* @version 1.0
* 类说明
* @date 2020/12/2 9:15
*/
public class WatermarkUtils {
private static int WATERMARK_POS_NONE = 0;
private static int WATERMARK_POS_HEAD = 1;
private static int WATERMARK_POS_TAIL = 2;
/**
* 将字符串转换成二进制字符串,以空格相隔
*
* @param input
* @return
*/
private String strToBinary(String input) {
char[] strChar = input.toCharArray();
String result = "";
String tmp = "";
for (int i = 0; i < strChar.length; i++) {
tmp = Integer.toBinaryString(strChar[i]);
while(tmp.length() < 16) {
tmp = "0" + tmp;
}
result += tmp;
result += " ";
}
return result.trim();
}
/**
* 将二进制字符串转换成int数组
*
* @param binStr
* @return
*/
public int[] binstrToIntArray(String binStr) {
char[] temp=binStr.toCharArray();
int[] result=new int[temp.length];
for(int i=0;i<temp.length;i++) {
result[i]=temp[i]-48;
}
return

信息数字化带来便利的同时也存在泄露等风险,数字水印技术可追溯信息泄露环节。文本水印技术研究相对较少,常见的有基于普通文本格式、不可见编码、文本内容等技术。其中不可见编码可利用零宽字符特性加密,还给出了代码实现示例。

901

被折叠的 条评论
为什么被折叠?



