QwindF 发表于 2024-6-1 20:28

字符串中文加密

先展示代码
from pypinyin import pinyin, Style


def encrypt_chinese(text):
    encrypted_text = []
    mapping = {}
    for char in text:
      if '\u4e00' <= char <= '\u9fff':# 检查是否为汉字
            pinyin_list = pinyin(char, style=Style.TONE3, heteronym=False)
            pinyin_str = pinyin_list
            # 首字母大写
            pinyin_str = pinyin_str.capitalize()
            # 加入分隔符以便解密时识别
            encrypted_text.append(f"{pinyin_str}#")
            mapping = char
      else:
            # 使用特殊标记保存非汉字字符
            encrypted_text.append(f"^{char}")
    return ''.join(encrypted_text), mapping


def decrypt_chinese(encrypted_text, mapping):
    decrypted_text = []
    temp_str = ''
    i = 0
    while i < len(encrypted_text):
      char = encrypted_text
      if char == '#':
            if temp_str:
                decrypted_text.append(mapping.get(temp_str, temp_str))
                temp_str = ''
      elif char == '^':
            if temp_str:
                decrypted_text.append(mapping.get(temp_str, temp_str))
                temp_str = ''
            if i < len(encrypted_text) - 1:
                decrypted_text.append(encrypted_text)
                i += 1
      else:
            temp_str += char
      i += 1
    if temp_str:# 如果最后一个字符不是#或^,则还要处理temp_str
      decrypted_text.append(mapping.get(temp_str, temp_str))
    return ''.join(decrypted_text)


if __name__ == "__main__":
    while True:
      user_input = input("请输入字符串:")
      encrypted_output, mapping = encrypt_chinese(user_input)
      print("加密后的字符串:", encrypted_output)
      print("解密后的字符串:", decrypt_chinese(encrypted_output, mapping))
      print("-" * 30)

缺点,介绍,起因自己看图片吧
请输入字符串:你好世界!这种将汉字转化为拼音的想法很早就有了,最早是接触到无线电的时候引发的,为什么当时无线电传输汉字不用拼音传输呢(应为当时拼音还没出,有兴趣的可以去查查发展史,b站也有人做视频)所以就有了这几行代码。
加密后的字符串: Ni3#Hao3#Shi4#Jie4#^!Zhe4#Zhong3#Jiang1#Han4#Zi4#Zhuan3#Hua4#Wei4#Pin1#Yin1#De#Xiang3#Fa3#Hen3#Zao3#Jiu4#You3#Le#^,Zui4#Zao3#Shi4#Jie1#Chu4#Dao4#Wu2#Xian4#Dian4#De#Shi2#Hou4#Yin3#Fa1#De#^,Wei4#Shen2#Me#Dang1#Shi2#Wu2#Xian4#Dian4#Chuan2#Shu1#Han4#Zi4#Bu4#Yong4#Pin1#Yin1#Chuan2#Shu1#Ne#^(Ying1#Wei4#Dang1#Shi2#Pin1#Yin1#Hai2#Mei2#Chu1#^,You3#Xing1#Qu4#De#Ke3#Yi3#Qu4#Cha2#Cha2#Fa1#Zhan3#Shi3#^,^bZhan4#Ye3#You3#Ren2#Zuo4#Shi4#Pin2#^)Suo3#Yi3#Jiu4#You3#Le#Zhe4#Ji3#Xing2#Dai4#Ma3#^。
解密后的字符串: 你好视界!这种将汉字转化为拼音的想法很早就有了,最早视接触到无线电的时候引发的,为什么当时无线电传输汉字不用拼音传输呢(应为当时拼音还没出,有兴去的可以去查查发展史,b站也有人做视频)所以就有了这几行代码。

atoms 发表于 2024-6-1 20:45

可是这样文字被替换成同音字了{:1_925:}

QwindF 发表于 2024-6-1 22:54

atoms 发表于 2024-6-1 20:45
可是这样文字被替换成同音字了

对,硬伤。
但是只要句子够长,就可以正确理解意思(我是这样想的)
有些字词可能看不懂,但是读出来就差不多了。

xixicoco 发表于 2024-6-1 23:45

有点意思

kof888 发表于 2024-6-2 06:00

这个加密后的字符串小学2年级的就能看懂吧;www

ltgb 发表于 2024-6-2 06:33

Liu4#Yi1#Er2#Tong2#Jie2#Kuai4#Le4#
Zhu4#Da4#Jia1#Neng2#Yi1#Zhi2#Bao3#Chi2#Tong2#Xin1#Liu4#Yi1#Er2#Tong2#Jie2#Kuai4#Le4#

gangdaomeimei 发表于 2024-6-2 08:14

什么用处呢

axaxax 发表于 2024-6-2 10:34

学习学习

skl520 发表于 2024-6-2 10:47

这加密后的中国人一看就懂啊

侃遍天下无二人 发表于 2024-6-2 11:02

可以试试切噜语或者 社**义核心**观 加密,都挺有意思的,而且没有还原成同音字的bug
页: [1] 2
查看完整版本: 字符串中文加密