零宽度字符水印隐藏技术
零宽度字符是隐藏不显示的,也是不可打印的,也就是说这种字符用大多数程序或编辑器是看不到的。最常见的是零宽度空格,它是 Unicode 字符空格,就像如果在两个字母间加一个零宽度空格,该空格是不可见的,表面上两个字母还是挨在一起的。就比如说,我在这句话中插入了 10 个零宽度空格,你能看到吗?(For example, I've inserted 10 zero-width spaces into this sentence, can you tell?)
介绍
在 fb 上看到了一个很有意思的文章
大意是,可以通过零宽度字符来隐藏一些信息,达到一些目的,比如隐写,或者水印。某种程度上来说,我们这里所说的零宽度字符可作为识别某些用户身份的“指纹”数据,也可非常方便地追溯到某些秘密数据的泄露源。
我的实现是把要隐藏的信息转为 bin,然后 1
替换为 e2808b
,0
替换为 e2808c
然后分别插到载体消息中的每一个字符后面。若载体消息短于隐藏信息的二进制,那就把多余的都塞到载体消息的最后一个字符前面,这样在复制的时候不至于掉少一些隐藏字符
还原的代码很简单,一看就知
代码
GayHub
来呀快活呀
零宽度字符水印隐藏技术
https://www.tr0y.wang/2018/04/20/ZeroWidthSpacesHiden/