零宽度字符水印隐藏技术

零宽度字符是隐藏不显示的,也是不可打印的,也就是说这种字符用大多数程序或编辑器是看不到的。最常见的是零宽度空格,它是 Unicode 字符空格,就像如果在两个字母间加一个零宽度空格,该空格是不可见的,表面上两个字母还是挨在一起的。就比如说,我在这句话中插入了 10 个零宽度空格,你能看到吗?(For example, I’ve inserted 10 zero-width spaces into this sentence, can you tell?)

介绍

在 fb 上看到了一个很有意思的文章

大意是,可以通过零宽度字符来隐藏一些信息,达到一些目的,比如隐写,或者水印。某种程度上来说,我们这里所说的零宽度字符可作为识别某些用户身份的“指纹”数据,也可非常方便地追溯到某些秘密数据的泄露源。

我的实现是把要隐藏的信息转为 bin,然后 1 替换为 e2808b0 替换为 e2808c

然后分别插到载体消息中的每一个字符后面。若载体消息短于隐藏信息的二进制,那就把多余的都塞到载体消息的最后一个字符前面,这样在复制的时候不至于掉少一些隐藏字符

还原的代码很简单,一看就知

代码

GayHub

来呀快活呀