汉字拼音加密笔记

原理

汉字拼音有多种表示法,为了让算法可逆,我们使用声调风格为拼音音调以数字形式加在拼音末尾处的格式。

表示为 cong1

我们使用 Python3 中的 pypinyin 包,借用其中的 pypinyin.lazy_pinyin() 函数快捷获取汉字拼音。

示例:

1
2
3
>>> from pypinyin import lazy_pinyin
>>> lazy_pinyin("独奏", style=8)
['du2', 'zou4']

然后我们将每个拼音的 ascii 码加起来,得到总和模 128 便可得到每个汉字所对应的 ascii 码明文。

的拼音为 'du2',所对应的 ascii 码明文为 11

这样我们便得到了每个明文可以对应的汉字,其中按理来说,每个 ascii 明文所对应的汉字应该是多个的。

有关 pypinyin 库的用法可查阅它们的 github 主页和官方文档:

https://github.com/mozillazg/python-pinyin

https://pypinyin.readthedocs.io/zh_CN/master/

代码

这里只给出解密代码:

1
2
3
4
5
6
7
8
9
10
import pypinyin

l = '夺旗赛好难啊'
d = [pypinyin.lazy_pinyin(i, pypinyin.Style.TONE3) for i in l]

for i in d[0]:
a = 0
for j in i:
a += ord(j)
print(chr(a % 128), end="")