android零宽空格,零宽字符文本水印原理
最近看到word-wrap源码里面有一个正则,有点迷惑:if (options.cut !== true) {
regexString += '([\\s\u200B]+|$)|[^\\s\u200B]+?([\\s\u200B]+|$)';
}复制代码
零宽空格
如果要搞清楚这句正则是干什么的,就需要了解到零宽空格了。零宽空格(zero-width space, ZWSP)是一种不可打印的Unicode字符,用于可能需要换行处。zh.wikipedia.org/wiki/%E9%9B…
复制这个om,作如下动作:
那这个和加密有什么关系呢?
水印原理
我们不难查到,零宽空格会延伸到零宽连字。
零宽连字和零宽不连字零宽连字(zero-width joiner,ZWJ)是一个控制字符,放在某些需要复杂排版语言(如阿拉伯语、印地语)的两个字符之间,使得这两个本不会发生连字的字符产生了连字效果。零宽连字符的Unicode码位是U+200D (HTML: )。zh.wikipedia.org/wiki/%E9%9B…
具体例子可以看到wiki上的例子。零宽不连字 (英文:zero-width non-joiner,缩写:ZWNJ)是一个不打印字符,放在电子文本的两个字符之间,抑制本来会发生的连字,而是以这两个字符原本的字形来绘制。Unicode中的零宽不连字字符映射为U+200C zero width non-joiner,HTML字符值引用为: zh.wikipedia.org/wiki/%E9%9B…
文本水印
我们常见的有图片水印,软件水印,视频水印等。那文本上的水印要是什么样子呢?文本中间穿插文案,比如这是一段[xxx.com]示例文案,说明这句话[xxx.com]的出处。
文本中通过某些不可见的字符,来携带水印。用户看不见,但是复制粘贴会携带上。
第一种就不说了,我们来看看第二种。上面说了两种领宽字符,恰好满足了不可见,且会被复制的特点。那要怎么用这两个字符呢?
原理
我们约定如下:ZWJ -> 0
ZWSP -> 1
ZWNJ -> 无
有一段文本:这是一段示例文案,说明这句话的出处,水印为xxx.com。伪代码:let zwj = ''let zwsp = '&zwsp;'let zwnj = ''let dict = { 0: zwj, 1: zwsp,
}let source = '这是一段示例文案,说明这句话的出处'let logo = 'xxx.com'let watermask = log// 追加`source${watermask}`复制代码
如果这里我们把水印换成1011,我们可以很快的实现:let logo = '1011'let watermask = zwsp + zwj + zwsp + zwsp`source${watermask}` // 这是一段示例文案,说明这句话的出处&zwsp;&zwsp;&zwsp;复制代码
如果要换成更丰富的水印字符,我们需要有一个作为无的标识,引入了zwnj如下:let logo = 'ab' // 或者更复杂let watermask = logo.map(char => tsf(char)).join(zwnj)// 每个字符转为二进制码function tsf(char) {let b = char.charCodeAt().toString(2) // a => 1100001
// 转为零宽字符标识return b.map(itm => { return dict[itm]
})
}复制代码
解密的话,上面逆向即可。
总结
整个流程就是
应用场景博客文章署名
小说网站等
注意
这种加密方式虽然一般情况是无感知的,但**如果在有些编辑器中粘贴,是可以看到零宽字符的。**比如开头的截图,浏览器的控制台是可以看到这个字符的。
android零宽空格,零宽字符文本水印原理相关推荐
- android中用点标识路径,Android Bitmap、路径、图片加上文本水印
前沿 不同的app可能需要加上不同的logo标识这张图片归属问题,比如微博图片可能涉及到原图版权,或者涉及到个人信息认证敏感信息,从安全的角度来说也需要加上特定的文本logo用于标识此图的所属用途. ...
- android零宽空格,特殊字符的问题—零宽空格
一.问题 在使用mpdf生成pdf文件的时候,出现了一个异常,在一个字符串后面,莫名了多了一个乱码符号: 但是在页面上看这个数据,是正常的: 查看其它的同类型数据,都是好的,唯独这个数据有问题. 二. ...
- android 自动补全方法,Android零基础入门|自动完成文本框AutoCompleteTextView
原标题:Android零基础入门|自动完成文本框AutoCompleteTextView 上一期学习的Spinner的使用,掌握的怎么样?本期一起来学习AutoCompleteTextView的使用. ...
- 零基础入门NLP - 天池新闻文本分类Task3笔记
零基础入门NLP - 天池新闻文本分类 以下以Datawhale与天池举办的新闻文本分类这个NLP赛题做的NLP入门Task2笔记 赛题链接:https://tianchi.aliyun.com/co ...
- 轻松搞定表白女朋友:Android版APP (零基础也可直接下载软件)
轻松搞定表白女朋友:Android版软件 (零基础也可直接下载软件) 在我们平时生活当中,经常会看到一些表白女朋友的html网页,但是Android端的表白软件可以说是基本没有,笔者在全网搜了一下,就 ...
- Android获取屏幕宽高,状态栏宽高,actionbar宽高,layout宽高,导航栏高度的方法汇总
看这个博客你可以知道 获取屏幕宽高,状态栏宽高,actionbar宽高,layout宽高,导航栏(虚拟按键栏)高度的方法 目录顺序为 代码测试的机型 状态栏高度 actionbar高度 屏幕高度 导航 ...
- android 获取url中的参数,验证邮箱格式,截取字符串中键值对的值,String的字节长度,去空格,替换字符
String ss="hello"; byte[] buff=ss.getBytes(); int f=buff.length; System.out.println(f); 字节 ...
- 数据安全:基于不可见字符的文本水印技术
一.概述 信息媒体的数字化为信息的存取提供了极大的方便,越来越多的业务现在都是基于网络信息完成的.与此同时,信息的泄露,篡改,盗版等也困扰这很多公司以及个人.那么如何降低这些风险或者说泄露了信息如何溯 ...
- android动态添加圆,Android开发中TextView 实现右上角跟随文本动态追加圆形红点
在一个比较坑的需求里,一段文字右上角需要追加一个圆形红点.最右侧有个金额,红点动态随着文字移动,然后各种摆布局,一下午坑死我了.后来果断放弃.然后就想试试直接自定义view来实现这个需求. 最坑的就是 ...
最新文章
- 陈天桥:欣赏360保护隐私 用户安全永远第一
- 文末福利|云原生下Java的变化与趋势?程序员为什么不喜欢低代码?答案在这里!...
- Qt QDialog将窗体变为顶层窗体(activateWindow(); 和 raise() )
- MPLS的几种备份方式——Vecloud
- redis StackExchange 主备 实现 demo
- JSON基础与数据解析、JSON方法、AJAX初识
- oracle静默安装集群,静默安装Oracle数据库10g篇
- DIV CSS在不同IE版本和FF以及Chrome中的兼容性差异解决方法(推荐)
- MacBook搭建go语言开发环境
- NodeJS 正则路由匹配
- linux找数组规矩,linux shell 数组建立及使用技巧(示例代码)
- java中readline函数_自定义BufferedReader中read和readLine方法
- yum更换国内源、yum下载rpm包 源码包安装
- 公司内网与外网连通中的一些小问题(达内)
- Eclipse的安装
- 电容屏和电阻屏的区别
- 证明:模n加法满足结合律
- ac68无线网卡 linux驱动下载,华硕ac68驱动|华硕USB-AC68无线网卡驱动下载 V2.1.2.1 官方版 - 比克尔下载...
- 使用paddlepaddle进行手写数字识别
- stc15f2k60s2.h