文档水印可以帮助您保护企业文档的版权、防止文档泄露等。在使用文档水印时,您需要将SASE提供的文档水印SDK嵌入到业务服务器上,或者将文档水印SDK部署成API服务供业务调用集成,在发生信息泄露时,可以通过水印信息定位出泄露人员。本文介绍如何使用文档水印功能。
当前支持在文档上嵌入明水印和暗水印。
如果嵌入的是明水印,可以直接在文档上看到明水印信息,定位泄露人员。
如果嵌入的是暗水印,无法通过肉眼直接看到暗水印信息,所以您需要在SASE控制台上提取暗水印信息,然后定位出泄露人员。
而大部分发生信息泄露或者版权纠纷等都是暗水印场景。
不同文档类型支持的能力说明
文件类型支持DOCX、PPTX、XLSX、PDF、DOC、PPT、XLS7种类型,支持的能力如下:
常规暗水印(属性)在文档属性中增加水印信息,可以抵抗文档增、删、改、另存(文档格式不变)攻击,不能抵抗格式转换攻击。
常规暗水印(零宽)在文档内容中增加水印信息,可以抵抗文档增、删、改、另存(文档格式不变)、部分文本复制粘贴,不能抵抗格式转换为PDF,可以抵抗格式转化为TXT。
常规暗水印(组件)可以抵抗文档增、删、改、另存(文档格式不变)、DOCX全选复制拷贝到新DOCX文档,但不能抵抗格式转换攻击。
背景明水印可以抵抗截图攻击、格式转换攻击,明水印内容是通过肉眼确认的,无需提取接口。
背景暗水印可以抵抗截图攻击、格式转换攻击,经过格式转换的文档提取水印需要通过截图提取。
文件类型 | 常规暗水印 属性 | 背景明水印 | 背景暗水印 | 常规暗水印 组件 | 常规暗水印 零宽 |
DOCX | 支持 | 支持 | 支持 | 支持 | 支持 |
PPTX | 支持 | 支持 | 支持 | 不支持 | 不支持 |
XLSX | 支持 | 支持 | 支持 | 不支持 | 不支持 |
支持 | 支持 | 支持 | 不支持 | 不支持 | |
DOC | 支持 | 不支持 | 不支持 | 不支持 | 不支持 |
PPT | 支持 | 不支持 | 不支持 | 不支持 | 不支持 |
XLS | 支持 | 不支持 | 不支持 | 不支持 | 不支持 |
操作流程
前提条件
已购买文档水印服务。具体信息,请参见数字水印计费概述。
文档集成明暗水印
步骤一:下载文档水印SDK包
登录办公安全平台控制台。
在嵌入服务页面,单击文档水印操作列下载SDK,将文档水印SDK压缩包下载到本地。并且保存AK和SK信息。
当前只支持Java语言。
下载的SDK压缩包中包含如下内容:
watermark-normaldocument-v1.2.8.jar:集成水印的SDK包,需要添加到Maven仓库。
nomalDocumentDemo:文档水印的Demo,您可以通过Demo进行体验。
步骤二:集成SDK
添加JAR包依赖(Maven)。
添加watermark-normaldocument-v1.2.2.jar依赖。
mvn install:install-file -Dfile=watermark-normaldocument-v1.2.8.jar -DgroupId=com.aliyun.security.sase -DartifactId=watermark-normaldocument -Dversion=v1.2.8 -Dpackaging=jar
在pom.xml文件中添加以下依赖。
<dependency> <groupId>com.aliyun.security.sase</groupId> <artifactId>watermark-normaldocument</artifactId> <version>v1.2.8</version> </dependency> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>5.13.0</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-excelant</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>ooxml-schemas</artifactId> <version>1.3</version> <exclusions> <exclusion> <groupId>org.apache.xmlbeans</groupId> <artifactId>xmlbeans</artifactId> </exclusion> </exclusions> </dependency>
调用文档水印接口。
初始化AK、SK。
/** * 初始化 ak sk * @param appKey 应用密钥Key * @param secret 应用密钥Secret * @param useLocalConfig 是否使用本地配置 0:远程配置(需要联网) 1:本地配置 */ WaterMarkUtils.init(appKey, secret, useLocalConfig);
在文档上添加数字水印。
方式一:添加水印后生成新的文档
ParamsFile paramsFile = new ParamsFile(); //明水印参数(必须):{"invisibleAntiTextCopy":"true","invisibleAntiAllCopy":"true","backgroundControl":{"bgAddVisible":"true","bgVisibleControl":{"visibleText":"阿里巴巴明水印TEST123","mode":"pos","fontSize":"30","fontColor":"0x000000","fontTransparent":"0.2","angle":"30","pos_x":"0.5","pos_y":"0.5","fontPath":"/tmp/AlibabaPuHuiTi-2-45-Light.ttf"},"bgAddInvisible":"true","bgInvisibleControl":{"invisibleTransparent":"0.03"}}} paramsFile.setVisibleParam(visibleParam); //目标文件路径 paramsFile.setDestFilePath(dest); //源文件路径 paramsFile.setSrcFilePath(src); //水印数字,范围1~4294967295 paramsFile.setMsgNum(msgNum); /** * 添加水印到文件 * @param baseParam * @return * @throws NormalDocumentException errorCode 异常码 errorMessage 异常信息 参考《错误码》 * @throws IOException */ WaterMarkUtils.WatermarkFile(paramsFile);
方式二:在原文档上添加水印并输出字节数组
ParamsBytes paramsBytes = new ParamsBytes(); //设置源文件字节数组 paramsBytes.setSrcFileBytes(srcFileBytes); //文件名称,根据文件名获取文件类型 paramsBytes.setFileName("234.doc"); //明水印参数:{"invisibleAntiTextCopy":"true","invisibleAntiAllCopy":"true","backgroundControl":{"bgAddVisible":"true","bgVisibleControl":{"visibleText":"阿里巴巴明水印TEST123","mode":"pos","fontSize":"30","fontColor":"0x000000","fontTransparent":"0.2","angle":"30","pos_x":"0.5","pos_y":"0.5","fontPath":"/tmp/AlibabaPuHuiTi-2-45-Light.ttf"},"bgAddInvisible":"true","bgInvisibleControl":{"invisibleTransparent":"0.03"}}} paramsBytes.setVisibleParam(visibleParam); //水印数字,范围1~4294967295 paramsBytes.setMsgNum(msgNum); /** * 添加水印并返回目标文件字节数组 * @param baseParam * @return * @throws NormalDocumentException errorCode 异常码 errorMessage 异常信息 参考《错误码》 * @throws IOException */ byte[] destFileBytes = WaterMarkUtils.WatermarkFile(paramsFile);
参数说明
visibleParam
该参数用于控制水印功能。如:可以控制暗水印是否开启、背景图明水印形式和样式、及背景图暗水印强度、背景明水印、背景暗水印是否开启。
传入时使用JSON字符串的压缩即可,无需换行、缩进或空格。JSON字符串中的key和value均为string类型,即需要用英文引号,不使用其他类型。如果JSON中的key和value,在 SDK中无此功能,则不生效。
例如“invisibleAntiTextCopy”和“invisibleAntiAllCopy”仅对DOCX文档有效,若在PPTX、XLSX、PDF中传入此参数,则不生效,也不会报错。
{
"invisibleAntiTextCopy": "true",
"invisibleAntiAllCopy": "true",
"backgroundControl": {
"bgAddVisible":"true",
"bgVisibleControl": {
"visibleText":"阿里巴巴明水印TEST123",
"mode":"pos",
"fontSize":"30",
"fontColor":"0x000000",
"fontTransparent":"0.2",
"angle":"30",
"pos_x":"0.5",
"pos_y":"0.5",
"fontPath":"/tmp/AlibabaPuHuiTi-2-45-Light.ttf"
},
"bgAddInvisible":"true",
"bgInvisibleControl": {
"invisibleTransparent":"0.03"
}
}
}
其中每个参数的含义:
名称 | 类型 | 必填 | 描述 | 示例值 |
invisibleAntiTextCopy | String | 是 | 控制零宽字符暗水印是否开启的控制字段。取值:
| true |
invisibleAntiAllCopy | String | 是 | 控制组件暗水印是否开启的控制字段。取值:
| true |
backgroundControl | JSON | 是 | 控制背景水印JSON对象,参考《bgVisibleControl参数的含义》 | JSON对象 |
bgAddVisible | String | 是 | 控制背景明水印是否开启的控制字段。取值:
| true |
bgVisibleControl | String | 是 | 控制背景明水印 | value为对象 |
visibleText | String | 是 | 明水印文字内容 | 阿里巴巴明水印TEST123 |
mode | String | 是 | 明水印模式,有两种pos和repeat,
| pos" |
fontSize | String | 是 | 明水印文字字号,值越大,明水印文字越大,为正整型数。 | 30 |
fontColor | String | 是 | 明水印文字颜色,是一个十六进制的像素值内容,顺序是RGB,例如0xFF00F0,其中FF是R像素值,00是G像素值,F0是B像素值。 | 0x000000 |
fontTransparent | String | 是 | 明水印文字透明度,可选值为0~1之间的浮点数。 | 0.2 |
angle | String | 是 | 明水印文字逆时针倾斜角度,可选值为0~360之间的整型数。0表示不倾斜。 | 30 |
pos_x | String | 是 | 位置模式专用的控制明水印水平位置的参数,以左下角为原点。数值在0~1之间时,为比例控制,数值大于1时,为精确的像素位置控制。 | 0.5 |
pos_y | String | 是 | 位置模式专用的控制明水印垂直位置的参数,以左下角为原点。数值在0~1之间时,为比例控制,数值大于1时,为精确的像素位置控制。 | 0.5 |
fontPath | String | 是 | 背景明水印字体路径,控制明水印字体样式。相对路径和绝对路径均可。 | /tmp/AlibabaPuHuiTi-2-45-Light.ttf |
bgAddInvisible | String | 是 | 控制背景暗水印是否开启
| true |
bgInvisibleControl | String | 是 | 控制背景暗水印的key | value为对象 |
invisibleTransparent | String | 是 | 背景暗水印的强度,0~0.05 超过范围,则强行取默认值为0.02 | 0.03 |
bgVisibleControl
名称 | 类型 | 必填 | 描述 | 示例值 |
horizonNumber | String | 是 | 平铺模式专用,表示明水印在水平方向上重复出现的次数,为整型数。 | 2 |
verticalNumber | String | 是 | 平铺模式专用,表示明水印在垂直方向上重复出现的次数,为整型数。 | 2 |
提取暗水印信息
已获取嵌入暗水印信息的外泄文档、外泄文档的截图。
步骤一:创建提取任务
登录办公安全平台控制台。
在提取服务页面,单击创建提取任务,提取外泄文档的暗水印内容。
配置项
说明
水印版本
选择使用的水印版本。取值:
常规:支持提取AI合成外的常规文件。
AIGC:支持提取的AI合成的文件。
水印类型
选择文档水印。
嵌入水印信息位宽
设置水印信息的位宽,位宽需要与透明水印底图的SDK位宽(默认为32位)保持一致。
上传待提取水印文件
根据界面提示,上传获取到的泄露文件。
步骤二:查看提取结果
水印任务创建完成后,您需要待提取成功后,查看提取结果,获取暗水印原文。
在提取服务页面,单击提取信息列展示。
在展开的信息中,您可以提取到暗水印原文(十进制数字)。
溯源泄露人员
将提取的暗水印原文和您业务中使用的映射服务或者自定义的映射表进行对应,从而定位出具体的泄露人员。
例如,您提取的暗水印原文是123456,映射表中123456对应的是张三,则定位出泄露人员是员工张三。