0寬字元隱藏文字加密及原理

2021-09-28 21:08:20 字數 1725 閱讀 8166

什麼是0寬字元?

顧名思義,就是位元組寬度為0的特殊字元。

比如:

你‏‏‍‎‏‍‌​‏‌‌‌‎‎‏好

看起來是一句簡單的打招呼,實際上還有隱含資訊。

我們把它複製到這裡

zero-width-lib

如下圖所示:

我們可以看到,這句話還有隱藏的加密內容。

使用方法如下:

相信你們跟我一樣,想知道它究竟是怎麼一回事。

先看看下面這個靶場,和上面一樣,這裡面有隱藏內容,也就是0寬字元

開啟f12看看

有一長串的字元編碼,這就是0寬字元

它為什麼不會顯示在頁面上呢?

首先,我們要知道這裡面的是什麼?

它叫零寬連字,全稱是zero width joiner,簡稱:zwj,是乙個不列印字元,放在某些需要複雜排版語言(如阿拉伯語、印地語)的兩個字元之間,使得這兩個本不會發生連字的字元產生了連字效果。零寬連字元的unicode碼位是u+200d (html:‍ ‍)。

怎麼實現的?

首先,輸入需要被加密的內容將被轉換為其二進位制形式,然後該二進位制將被轉換為一系列表示每個二進位制數字的零寬度字元。然後可以將零寬度的字串不可見地插入正常文字中。如果將文字貼上在其他地方,則可以提取零寬度的字串,然後反向進行操作以找出被加密的內容!

具體加密過程

1.將需加密的內容轉換為二進位制

只是將每個字元轉換為其等效的二進位制

const zeropad = num => 『00000000』.slice(string(num).length) + num;

const texttobinary = username => (

username.split('').map(char =>

zeropad(char.charcodeat(0).tostring(2))).join(' ')

);

2.將二進位制轉換為0寬字元

它將遍歷二進位制字串,並將每個1轉換為0寬度空間,將每個0轉換為零寬非連線符。轉換字母後,我們將插入0寬連線符,然後再下乙個。

const binarytozerowidth = binary => (

binary.split('').map((binarynum) => else if (num === 0)

return '‍'; // zero-width joiner

}).join('') // zero-width no-break space

);

3.插入正常文字中

需要注意的是加密與解密所使用的字典必須一致,也就是說,在哪兒進行加密的,就要在哪兒解密。

解密過程就是加密過程的反邏輯

很明顯,可以用於文字加密、文章水印等。

隱藏文字問題

簡單的記錄一下 1 內聯元素要先轉換 這第一種比較常見 這裡是讓超出以.代替 實現這 的提前條件是給這元素設定乙個固定的width 因為其不換行加超出隱藏就有這功能 2 內聯元素要先轉換 因為被要求不要.隱藏 試了一下 會有顯示半個字等等問題 只好尋找新操作 這裡呢是給高設死了 所以只顯示一行,改變...

在Word中隱藏文字

我們在用word中編輯文件時,有時需要對文件中的部分文字進行隱藏,例如在製作試卷時,可以先將答案連同試題一起製作出來,在列印前將答案隱藏,然後在閱卷或講解試題時再將隱藏的文字顯示出來列印。下面以word 2003為例,來說明一下具體的方法 1.選擇所有需要隱藏的文字,單擊選單 格式 字型 彈出 字型...

顯示隱藏文字內容 2020 11 20

自學js,錯誤案例 value可得到屬性值或者更改屬性值 判斷value值是否為空,所以用 doctype html content type content text html charset utf 8 input style head 1 value可得到屬性值或者更改屬性值 text val...