python解密《御赐小仵作》反切注韵法

您所在的位置:网站首页 御赐小仵作那个反切注韵法 python解密《御赐小仵作》反切注韵法

python解密《御赐小仵作》反切注韵法

2024-06-04 19:54| 来源: 网络整理| 查看: 265

在这里插入图片描述 @TOC

自来水的自述

今天也来当把【自来水】,一开始我对这部剧是没什么想法的,但架不住这部剧频频在我眼前刷屏,多次上热搜也就算了,朋友圈、豆瓣、微博、常看的一些大佬公众号还能经常看到安利。 对于不怎么看视频的我来说,也就记着个名字,并没有去刷的欲望,上周末闲来无事,找个下饭视频就又想起来这个了,刚好也在腾讯首页推荐, 打开之后,一发不可收拾,熬夜通宵追剧,一个周末淦完了!难怪豆瓣评分足足冲到了 8.4 分,口碑在同期播出的古装剧中达到最佳。个人觉得长大后看的最出彩的一部剧了!

还是个“三无”网剧:

没有大腕明星的卡司, 没有铺天盖地的宣发, 甚至成本经费都有些“寒酸,

故事逻辑异常严禁,没有把观众当傻*,文学素养让我一度认为我是九年义务教育漏网之鱼,其他的自行看剧体验吧,今天想讲一下21集,小金鱼解密驸马的密信的情节——基于python实现反切注韵法的中国式密码学

反切注韵法解密

毕竟也曾是个国学爱好者,看剧时候,第一次听到反切注韵法,我就知道我不配了,一顿百度猛如虎,先上链接解释下什么是反切注韵法,毕竟不是国学科普,这里就不复制了,感兴趣的直接跳链接吧

反切-百度百科 《御赐小仵作》里提及的反切注韵法是什么意思啊?

下面进入正题之前还需要先了解一个库python的拼音库:

Python 中拼音库 PyPinyin 的用法

在这里插入图片描述

# 安装库-拼音库和去除中文标点符号的库 !pip install pypinyin -ihttps://pypi.tuna.tsinghua.edu.cn/simple !pip install zhong -ihttps://pypi.tuna.tsinghua.edu.cn/simple # 先导入母本诗词 m1 = "桃花口,静水旁,幼子垂丝,微澜皱,媚娘采荇,清波荡,染浮光。" m2 = "春花渐谢夏叶宽,月沉横桥饵光庞。渭水怀秋,无尽秋愁泊云来。灞陵伤别,多少相思烟雨中。淦,饿,冤,北,永" # 这里说明下,网上说这里是华点,密码对不上,道具是随便弄的,这个我没去深究,毕竟还有扬州码子,还要截图密文太麻烦, # 这不重要,主要是解密过程中缺少韵母:an,e,van,ei,iong # 所以我在后面增加了几个字 # 有意思的是,百度中又了解到一个知识盲点,三合复韵母,有兴趣的自行百度 # 导入库 from pypinyin import pinyin # 去除中文标点符号 import re,string from zhon.hanzi import punctuation # 古文是无标点的,为了方便阅读加了标点,这里再去除掉 m1_ = re.sub(r"[%s]+" %punctuation,"",m1) m2_ = re.sub(r"[%s]+" %punctuation,"",m2) # 由于前文提到这里的道具是凑的,就不解析剧中密码本了 # 这里我把驸马密信的内容给扣下来了,做一个反向解析,即由密信内容解析出原来的密码数字 def get_paswd_info(sentence): """解析母本拼音信息""" # 用于存储解析后的声母 shm_list = [] # 用于存储解析后的带声调的韵母 ym_list = [] # 用于存储解析后的不带声调的韵母 ym_list_only = [] for word in sentence: # 声母解析 s = pypinyin.pinyin(word,style=pypinyin.INITIALS)[0][0] shm_list.append(s) # 带声调的韵母解析 - 带声调,声调在各个拼音之后,用数字 [1-4] 进行表示 y = pypinyin.pinyin(word,style=pypinyin.FINALS_TONE3)[0][0] ym_list.append(y) # 不带声调的韵母解析 y_ = pypinyin.pinyin(word,style=pypinyin.FINALS)[0][0] ym_list_only.append(y_) return shm_list,ym_list,ym_list_only # 密信内容 info = """吾名萧恒,乃文宗朝监察御史,今留此密文,望后世饱学而无畏之士,解鬼宅之谜、破残局,得吾自沉之地,使此沉冤得见天日,还剑南忠义之魂以清白之名。 太和九年,文宗帝欲根除北司之祸,吾奉密旨宣剑南节度使陈璎,领兵入京策应,陈璎接旨即行,却不料甘露事败,宦党挟天子而屠群臣,陈璎一众义师被诬谋反。 吾携密旨突围,却遭围堵重伤,不得已跳崖以求死地后生。 幸得一采药巫医相救,然昏迷月余,苏醒之时已无力回天,宦党更是借圣谕,以英烈之名与郡王爵位相加,欲诱吾现身,取吾命以灭证据,吾唯恐一步踏错,非但洗冤无望,反牵连更多无辜,无奈之下在巫医染病西归后,承其衣钵,藏居于关岭县平乐镇以图后事。 幸得仵作楚家照拂,吾一日不敢忘身负之重托,然关岭县地势险要,与外界相通者唯有一滑索,宦党势力于西南之搜捕从未停歇,吾双腿已废,不良于行,县中官员又频对潜逃于此之剑南节度使余众,痛下杀手,吾始终未得机会与长安联络。 后有宦官独自追查至吾隐居处。吾侥幸杀之,藏其尸首与凶器于院中墙内,以为存证。 奈何残躯病体每况愈下,时日无多,虽心有不甘,却唯能做此安排。 吾写此书自沉泥沼,以天地为棺,藏沉冤以期后人明法""" # 同样地,对密信内容做去除中文标点符号处理 info_ = re.sub(r"[%s]+" %punctuation,"",info).replace("\n","") # 由母本(前面的两首诗)解析出密文的声母和不带声调的韵母 mw_shm = get_paswd_info(m1_)[0] mw_ym = get_paswd_info(m2_)[2] def creat_mw_num(info,mw_shm,mw_ym): """构造解析后的密文数字""" first_num = [] shm = get_paswd_info(info)[0] for i in shm: if i: # 在密文声母中搜索位置 first_num.append(mw_shm.index(i)) else: # 这里没有声母的使用0代替 first_num.append(0) second_num = [] ym = get_paswd_info(info)[2] for j in ym: #在密文韵母中搜索位置 second_num.append(mw_ym.index(j)) third_num = [] sd = get_paswd_info(info)[1] for k in sd: # 解析后的声调1-4 third_num.append(k[-1]) # 使用zip进行压缩解包 return list(zip(first_num,second_num,third_num)) # 输入密信,和密文声母韵母————》得到驸马密信的实际密文 creat_mw_num(info_,mw_shm,mw_ym)

解析后的密码如下图所示 在这里插入图片描述

# 生成用于测试的密码 message = "几多轮回少一人轮回几多到凡尘" creat_mw_num(message,mw_shm,mw_ym) def send_message(num_info,mw_shm,mw_ym): """密码转信息""" info = [] for num in num_info: info.append(mw_shm[num[0]]+mw_ym[num[1]]+num[2]) return info # 用前面生成的测试密码测试 num_info = [(3, 32, '3'), (19, 29, '1'), (11, 0, '2'), (1, 14, '2'), (4, 30, '3'), (0, 32, '1'), (20, 8, '2'), (11, 0, '2'), (1, 14, '2'), (3, 32, '3'), (19, 29, '1'), (19, 30, '4'), (21, 36, '2'), (8, 8, '2')] send_message(num_info,mw_shm,mw_ym) # 运行结果如下图所示

在这里插入图片描述

写在最后

综上所述,外加后面解析《诗经》密信时的凡尔赛发言,小金鱼绝对是个移动的计算机,可能是未来机器人穿越回去的,哈哈哈、、、、、这记忆力,计算力,人力有时穷啊!!!!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3