网上冲浪发现的好玩的加密方式,但是有的使用的是摩斯密码之类的。(中文会翻好几倍长度)
然后我发现零宽字符够16种,所以尝试使用16进制来加密。(中文一般长度 * 2就够了)

  • 零宽字符是一种没有长度的字符,实际作用可以进行百度。
  • 16进制一共16种不一样的字符,正常为以下16种。
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f

加密阶段

原理

一个汉字先转换成 字节类型 ,然后转换成 16进制数 ,此时一个汉字一般对应2个字符(就是2个16进制数
此时我们进行把每个 16进制字符 替换成对应的 零宽字符 就完成了加密。

操作

首先先搞出对应的字典。

a = {
    '0': '​',
    '1': '‌',
    '2': '‍',
    '3': '‎',
    '4': '‏',
    '5': '‪',
    '6': '‫',
    '7': '‬',
    '8': '‭',
    '9': '‮',
    'a': '',
    'b': '',
    'c': '',
    'd': '',
    'e': '',
    'f': ''
}

使用 .encode('utf-8').hex() 进行字符串转16进制。

b = '你好世界'
c = b.encode('utf-8').hex()

然后进行依次替换。

for i in c:
    d += a[i]

最后输出就好。

print(f'密{d}文')

解密阶段

同样还是那个字典。

a = {
    '0': '​',
    '1': '‌',
    '2': '‍',
    '3': '‎',
    '4': '‏',
    '5': '‪',
    '6': '‫',
    '7': '‬',
    '8': '‭',
    '9': '‮',
    'a': '',
    'b': '',
    'c': '',
    'd': '',
    'e': '',
    'f': ''
}

只不过这回我们要用到这个字典的反对应字典。
我用的笨方法调转的字典对应关系。

c = {}
for i, j in a.items():
    c[j] = i

然后我们需要对输入的解密的字符串进行取值,将全部的零宽字符提取出来。

import re

b = input('输入密文:')
d = re.sub('[^\u200b-\u200f\uFEFF\u202a-\u202e\u206a-\u206f]', '', b)

然后将零宽字符转成16进制。

for i in d:
    e += c[i]

最后将16进制转成字符串就大功告成了!

f = bytes.fromhex(e).decode('utf-8')
print(f)