chenglong

Apr 03, 2023

使用零宽字符实现文本隐藏加密

notion image
  1. 使用零宽字符实现文本隐藏加密
零宽字符是一种在浏览器中不打印的字符,大致相当于display-none,在许多文本应用中也不显示,比如邮箱、QQ、微信、文本编辑器等;
本文讲解了如何使用零宽字符实现文本隐藏和加密;

使用零宽字符实现文本隐藏加密

什么是零宽字体

零宽字符是一种在浏览器中不打印的字符,大致相当于 display: none,在许多文本应用中也不显示,比如邮箱、QQ、微信、文本编辑器等;
这里有三种零宽字符 – 零宽空格、零宽连字、零宽不连字
零宽字符在浏览器中对应的转义字符: 零宽空格 --- ​ 零宽不连字 --- ‌ 零宽连字 --- ‍

使用零宽字体加密

对于零宽字体的加密可以使用摩斯密码:
摩斯电码采用长短两种符号进行文本加密,通过字典进行加密和解码,摩斯电码字典如下所示:
字符
代码
字符
代码
字符
代码
字符
代码
字符
代码
字符
代码
字符
代码
如果我们使用/作为分隔符,则将 morse 这个单词转换为摩斯电码就是:
morse -> --/---/.-./.../.
现在我们再将 / 替换为零宽空格; - 替换问零宽连字;. 替换为零宽不连字
/ --> ​ . --> ‌ - --> ‍
那么就能将morse这个单词转换为如下零宽字符
‍‍​‍‍‍​‌‍‌​‌‌‌​‌
将这段零宽字符粘贴进一个HTML文件当中
<p>前</p> <div>&#8205;&#8205;&#8203;&#8205;&#8205;&#8205;&#8203;&#8204;&#8205;&#8204;&#8203;&#8204;&#8204;&#8204;&#8203;&#8204;</div> <p>后</p>
在浏览器中打开这个HTML文件,你只能看到 "前后" 两个字!
到这,使用零宽字符实现文本隐藏加密的原理已经可见一斑了!

中文字符加密支持

要实现中文加解密,主要思路是先对文本进行正则匹配,将其中的中文进行Unicode转码,转码后整段文本就变成了:字母、数字、\ 的组合,我们在加解密字典中加上对 \ 的支持,即可!

加密使用方式

注意:
  1. pc版QQ不支持零宽字符,会显示空格,但手机版不会;
  1. 中文转码长度大约是相同长度英文字符的6倍;
  1. 零宽字符虽然看不见但是,但也是一个个字符,所以删除含有零宽字符的文本时,删到零宽字符时会删不动要把零宽字符全部删完才能接着往下删;
在线地址:
上面的网站都可以实现零宽字符加密,大家不妨可以试试!

应用场景

① 存储隐藏信息

零宽字体可以用来存储隐藏信息, 比如:隐藏加密存储比特币钱包,或者在你的代码里埋下一个彩蛋:

② 秘密传达消息

零宽字符在大部分应用都支持,pc版QQ会显示零宽字符,但移动端不显示;
你可以将密文加密到普通文本中,然后邮件发送,表面上看起来是普通文本,只有对方复制明文进行解密后才能看出隐藏信息!

③ 为文章添加隐藏水印

你可以在你写的文章插入隐藏字符,将作者信息嵌入其中;
当别人复制你的文章时,并不会发现这篇文章已经被你悄悄打下水印;

在写代码时的坑

零宽字体通常是不可见的,所以在写代码的时候,如果在代码中加入了这些零宽字符,是非常坑的!
所以在打印日志的时候,推荐使用:fmt.Printf("%#v", info)来打印日志!

附录

参考文章:

Copyright © 2024 chenglong

logo