简介
最近在玩CTF中,发现有一种叫零宽度字符的东西,"它是隐藏不显示的,也是不可打印的,也就是说这种字符用大多数程序或编辑器是看不到的",要是往里插入零宽度字符,我们肉眼是看不出来区别的。
最常见的是零宽度空格,它是Unicode字符空格,就像如果在两个字母间加一个零宽度空格,该空格是不可见的,表面上两个字母还是挨在一起的。
zero-width-lib


1.这个项目是用JavaScript写的,这种是带文字的隐写加密,可以用来发一些加密的通话别人也看不到异常。

var text = "我喜欢你"
text.length
// 输出结果 27
var text1 = "我喜欢你"
text1.length
// 输出结果 4
text === text1
// 输出结果 false2.虽然看不到,但是字符长度是不一样text与text1也不是同一个字符串,只要把字替换成空格的零字符,随便加入或插入一个位置,就又是一个新的字符了,这样就实现了重名的效果。
源码使用

npm install zero-width-lib
"type":"module"1.要有node环境这里我就不多说了,首先新建一个文件夹在里面创建 index.js 文件,然后在这里启动cmd下载第三方库,下载完然后记在 package.json 加入 "type":"module" 不然运行会报错的,然后把以下代码写到 index.js 文件里。
import * as z from 'zero-width-lib';
const visble = 'hello world';
const hidden = 'I like you, but just like you';
const encoded = z.encode(visble, hidden); // 'h*********ello world'
console.log(encoded)
const decoded = z.decode(encoded); // 'inpired by @umpox'
// console.log(decoded)
// 3. extract ZWC from text
const extracted = z.extract(encoded);
const vis = extracted.vis; // 'hello world'
const hid = extracted.hid; // '*********'
console.log(vis,hid)
// 4. escape from string matching
const forbidden = 'forbidden';
const escaped = z.split(forbidden); // 'f*o*r*b*i*d*d*e*n*'
console.log(escaped)
2.然后运行一下 index.js 就可以生成结果,可以看到有一些空格不用管,直接全复制 粘贴下就可以看到效果了。
评论 (0)