前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python解密《御赐小仵作》反切注韵法

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

作者头像
诡途
发布2022-01-07 08:21:09
7260
发布2022-01-07 08:21:09
举报
文章被收录于专栏:诡途的python路诡途的python路
在这里插入图片描述
在这里插入图片描述

阅读助手

自来水的自述

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

还是个“三无”网剧:

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

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

反切注韵法解密

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

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

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
# 安装库-拼音库和去除中文标点符号的库
!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)

解析后的密码如下图所示

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
# 生成用于测试的密码
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)
# 运行结果如下图所示
在这里插入图片描述
在这里插入图片描述

写在最后

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-08-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 阅读助手
  • 自来水的自述
  • 反切注韵法解密
  • 写在最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档