水印嵌入与提取说明

通过示例说明向数据中嵌入水印和提取水印的过程。

本例中,为提高数据安全性,使数据具备泄露后溯源的可能性,需要向数据中添加如下字符串“john230101”(不含引号)作为水印,嵌入到数据表dm_project_expenditure_exampleitemcost两个字段的数据中。其中item字段为字符类型(char),cost字段为数值类型(integer)。

  1. 首先创建水印嵌入任务,针对两个字段需创建两个任务。一个任务中水印嵌入字段为item,水印算法为零宽空格算法;一个任务中水印嵌入字段为cost,水印算法为最低有效位修改算法。

  1. 任务创建后,初始化生成业务流程,并启动任务。

  1. 水印嵌入任务运行过程中,会将水印嵌入到数据中,水印嵌入过程说明如下:

  1. 数据水印嵌入后,后续数据的流转将会一直携带水印。

  1. 当数据发生泄漏时,获取到泄露出去的数据,通过创建水印提取任务,获取其中的水印信息。如果数据的文件为CSVExcel,则通常包含字段信息,可以在任务中指定主键列或水印嵌入的列,任务执行时会按指定的列解析,如未指定则在全量表数据中分析;如果数据文件为TXT格式,由于没有字段信息,需要指定泄露数据中主键或水印嵌入的列,任务执行时会按指定的列解析,如未指定则会对全量内容进行分析。

  1. 任务创建后,初始化生成业务流程,并启动任务。

  1. 水印提取任务运行过程中,会从数据中提取水印,水印提取过程说明如下:

首先按零宽空格算法检查字符类型字段中是否存在水印。如果存在,则提取水印;如果不存在,则确认是否有主键列:

字符类型会按零宽空格算法根据插入位置,提取出零宽字符,然后组合成水印编码。之后经过反编码,即可获得水印信息。例如,item字段的前三个值为:墨盒、纸张、打印机,提取出零宽字符后仍为这三个值,而提取出的零宽字符替换为四进制数,再进行转换,即可获取水印信息。

数值类型会按最低有效位算法从水印编码插入位置提取数据的最低位编码,然后组合成水印编码。例如,cost的前三个值为12586255071,其转换为二进制后为1001110101010011100011001111001111,提取最低有效位的值并组合,可以获得011,其他值提取类似,提取出完整编码后,进行转换,即可获取水印信息。

首先按零宽空格算法对所有字段进行扫描。

  1. 水印提取任务运行完成后,即可获得提取到的水印信息。