揭秘《庆余年算法番外篇》:范闲如何使用维吉尼亚密码解密二皇子密信
❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣!
推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注
导航:
- LeetCode解锁1000题: 打怪升级之旅:每题都包括3-5种算法,以及详细的代码实现,刷题面试跳槽必备
- 漫画版算法详解:通过漫画的形式和动态GIF图片把复杂的算法每一步进行详细可视解读,看一遍就掌握
- python源码解读:解读python的源代码与调用关系,快速提升代码质量
- python数据分析可视化:企业实战案例:企业级数据分析案例与可视化,提升数据分析思维和可视化能力
- 程序员必备的数学知识与应用:全面详细的介绍了工程师都必备的数学知识
期待与您一起探索技术、持续学习、一步步打怪升级 欢迎订阅本专栏❤️❤️
背景设定
在《庆余年》中,范闲不仅要面对复杂的政治斗争,还要应对各种阴谋和背叛。在某一集中,范闲截获了一封由二皇子发出的密文。密文中只有一串汉字,通过解密可以揭示重要情报。范闲需要利用维吉尼亚密码解密这封密文,从而揭露二皇子的阴谋。
场景描述
范闲在一个隐秘的地点,收到了一封由二皇子发出的密文。信中包含的密文是:
金 达 达 皇 皇 子 子
范闲知道,这些汉字是通过一种密码加密的,需要找到密钥才能解密出明文。
解密过程:使用维吉尼亚密码
维吉尼亚密码是一种经典的多表代替密码,通过使用一个密钥,将明文中的每个字符与密钥对应字符进行位移加密,生成密文。解密时则使用相同的密钥,将密文字母逆向位移还原为明文。
维吉尼亚密码的基本原理
- 密钥:维吉尼亚密码使用一个重复的密钥对明文进行加密。
- 加密过程:每个明文字母通过与密钥字母的位移相结合生成密文。
- 解密过程:解密时,需要使用相同的密钥,将密文字母逆向位移还原为明文。
解密步骤
-
准备密文和密钥
- 密文:
金 达 达 皇 皇 子 子
- 密钥:
秘 密
- 密文:
-
将汉字转换为数字
- 使用一个简单的映射,将汉字转换为数字:
黄
-> 1,金
-> 2,送
-> 3,达
-> 4,二
-> 5,皇
-> 6,子
-> 7秘
-> 1,密
-> 2
- 使用一个简单的映射,将汉字转换为数字:
-
将密钥转换为数字:
秘
-> 1,密
-> 2
-
解密公式
- 给定密文字符 ( C ) 和密钥字符 ( K ),明文字符 ( P ) 的计算公式如下:
[ P = (C - K + N) \mod N ] - 其中 ( N ) 是汉字表的大小,这里假设 ( N = 7 )。
- 给定密文字符 ( C ) 和密钥字符 ( K ),明文字符 ( P ) 的计算公式如下:
解密计算
我们假设汉字的映射为:
黄 -> 1
金 -> 2
送 -> 3
达 -> 4
二 -> 5
皇 -> 6
子 -> 7
秘 -> 1
密 -> 2
按照维吉尼亚密码的解密规则进行计算:
金 (2) - 秘 (1) = 1 -> 黄
达 (4) - 密 (2) = 2 -> 金
达 (4) - 秘 (1) = 3 -> 送
皇 (6) - 密 (2) = 4 -> 达
皇 (6) - 秘 (1) = 5 -> 二
子 (7) - 密 (2) = 5 -> 二
子 (7) - 秘 (1) = 6 -> 皇
结果是:
密文: 金 达 达 皇 皇 子 子
密钥: 秘 密 秘 密 秘 密 秘
明文: 黄 金 送 达 二 二 皇
Python实现
以下是用Python代码实现的过程:
def vigenere_decrypt_chinese(cipher_text, key):# 汉字到数字的映射char_to_num = {'黄': 1, '金': 2, '送': 3, '达': 4, '二': 5, '皇': 6, '子': 7,'秘': 1, '密': 2}# 数字到汉字的映射num_to_char = {v: k for k, v in char_to_num.items()}decrypted_text = []key_length = len(key)for i, char in enumerate(cipher_text):if char in char_to_num:# 计算密文字母和密钥字母的偏移c = char_to_num[char]k = char_to_num[key[i % key_length]]# 解密公式p = (c - k + 7) % 7p = 7 if p == 0 else p # 如果模运算结果是0,取7decrypted_text.append(num_to_char[p])else:decrypted_text.append(char)return ''.join(decrypted_text)# 示例
cipher_text = "金达达皇皇子子"
key = "秘密"decrypted_text = vigenere_decrypt_chinese(cipher_text, key)
print("解密后的明文:", decrypted_text)
场景细节
- 范闲收到密文:范闲在书房中仔细阅读密文,密文内容是“金达达皇皇子子”。
- 范闲识别密钥:范闲知道二皇子惯用的密钥是“秘密”。
- 范闲使用维吉尼亚密码进行解密:范闲使用密钥“秘密”对密文进行解密。
- 解密后的明文:通过维吉尼亚密码解密,范闲得到了明文“黄金送达二皇子”。
总结
本故事纯属虚构,如有雷同,纯属胡编乱造。通过这个具体场景,我们展示了如何使用维吉尼亚密码解密“金达达皇皇子子”,并将其转换为明文“黄金送达二皇子”。这种加密和解密过程使得原文更加复杂,增加了破解难度。在《庆余年》的场景中,范闲可以通过破解维吉尼亚密码解密出二皇子的阴谋。这个例子不仅增强了故事的紧张感和趣味性,也让读者更好地理解经典密码学算法在实际中的应用。希望这些详细的步骤和算法展示能够帮助读者更好地理解和应用这些技术。
🌹🌹如果觉得这篇文对你有帮助的话,记得一键三连关注、赞👍🏻、收藏是对作者最大的鼓励,非常感谢 ❥(^_-)
❤️❤️关注公众号 数据分析螺丝钉 回复 学习资料 领取高价值免费学习资料❥(^_-)
相关文章:

揭秘《庆余年算法番外篇》:范闲如何使用维吉尼亚密码解密二皇子密信
❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…...

Java进阶学习笔记11——多态
什么是多态? 多态是在继承/实现情况下一种现象,表现为:对象多态和行为多态。 同一个对象,在不同时刻表现出来的不同形态。 多态的前提: 要有继承/实现关系 要有方法的重写 要有父类引用指向子类对象。 多态的具体代码…...

注意力机制篇 | YOLOv8改进之引入用于目标检测的混合局部通道注意力MLCA
前言:Hello大家好,我是小哥谈。注意力机制是可以帮助神经网络突出重要元素,抑制无关元素。然而,绝大多数通道注意力机制只包含通道特征信息,忽略了空间特征信息,导致模型表示效果或目标检测性能较差,且空间注意模块往往较为复杂。为了在性能和复杂性之间取得平衡,本文提…...
百度生成数据库
问题1: 帮我创建2个表student与score表,要求student表有id,createDate,userName,phone,age,sex,introduce, 要求score表有id,scoreName,result,studentId(student表的id外键)。 要求student表中插入5条学生信息,都要是中文的。 要…...

【SpringBoot】整合百度文字识别
流程图 一、前期准备 1.1 打开百度智能云官网找到管理中心创建应用 全选文字识别 1.2 保存好AppId、API Key和Secret Key 1.3 找到通用场景文字识别,立即使用 1.4 根据自己需要,选择要开通的项目 二、代码编写 以通用文字识别(高精度版&am…...
Java如何设计一个功能
流程说明:实现一组功能的步骤 1,充分了解需求,包括所有的细节,需要知道要做一个什么样的功能。 2,设计实体/表 正向工程:设计实体、映射文件 --> 建表 反向工程:设计表 --> 映射文件、实体 设计实体类型分析步骤: 1)功能模块有几个实体…...
MySQL 字符字段长度设置详解:语法、注意事项和示例
本文将详细介绍在 MySQL 数据库中如何设置字符字段的长度。将介绍字符字段的数据类型、长度限制、语法示例,并提供具体的示例,以正确设置和管理字符字段的长度。 1. MySQL 字符字段长度概述 在 MySQL 中,字符字段是用于存储文本型数据的列。…...

【对角线遍历】python
没啥思路 class Solution:def findDiagonalOrder(self, mat: List[List[int]]) -> List[int]:mlen(mat)nlen(mat[0])ret[]if len(mat)0:return retcount0#mn-1是对角线总数while count<mn-1:#x和y的和刚好是count数#偶数为右上走if count%20:xcount if(count<m)else (…...
温度检测小系统兼继电器模块和小风扇
1.思路: 代码还要封装! 延迟1秒;串口初始化;LCD1602显示屏初始化;延迟两秒;ledone不亮; while循环,延迟1秒,DHT模块读取数据;封装接收数据函数;发…...

[数据结构1.0]计数排序
读者老爷好,本鼠鼠最近学了计数排序,浅浅介绍一下! 目录 1.统计相同元素出现次数 2.根据统计的结果将序列回填到原来的序列中 3.相对映射计数排序 计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用,是非比较排…...
PostgreSQL入门教程
PostgreSQL是一种开源的关系型数据库管理系统,它具有高度的可靠性、可扩展性和性能。下面是一个简单的PostgreSQL入门教程,帮助你开始使用这个强大的数据库管理系统。 步骤1:安装PostgreSQL 首先,你需要下载并安装PostgreSQL。你…...

【spring】@ControllerAdvice注解学习
ControllerAdvice介绍 ControllerAdvice 是 Spring 框架提供的一个注解,用于定义一个全局的异常处理类或者说是控制器增强类(controller advice class)。这个特性特别适用于那些你想应用于整个应用程序中多个控制器的共有行为,比…...

【全开源】赛事报名系统源码(Fastadmin+ThinkPHP和Uniapp)
基于FastadminThinkPHP和Uniapp开发的赛事报名系统,包含个人报名和团队报名、成绩查询、成绩证书等。 构建高效便捷的赛事参与平台 一、引言:赛事报名系统的重要性 在举办各类赛事时,一个高效便捷的报名系统对于组织者和参与者来说都至关重…...

杰理-耳机进入关机关闭内内置触摸-节省功耗
杰理-耳机进入关机关闭内内置触摸-节省功耗 if (__this->init 0) {return LP_TOUCH_SOFTOFF_MODE_LEGACY; }if ((__this -> softoff_mode LP_TOUCH_SOFTOFF_MODE_ADVANCE) && (__this->softoff_keep 0)) {lp_touch_key_disable(); } __this->softoff_k…...
Homebrew安装、 Mac上pyenv的安装与使用,复制黏贴搞定,网上教程看得眼花缭乱的来看看,简单明了一步到胃!!
安装 Homebrew /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"安装pyenv brew install pyenv添加到终端使用的配置文件.zshrc、.bashrc 避免不必要的麻烦两个终端的配置文件都进行添加,文件在当前用户目…...

通过注意力调节实现更好的文本到图像生成对齐
近年来,生成性AI技术在众多领域取得了前所未有的进步。大规模预训练模型的出现激发了各种下游任务中的新应用。这在文本到图像生成领域尤为明显,例如Stable Diffusion、DALL-E 2和Imagen等模型已经显著展示了它们的能力。尽管如此,复杂提示中…...

Java开发大厂面试第26讲:生产环境如何排查问题和优化 JVM?
通过前面几个课时的学习,相信你对 JVM 的理论及实践等相关知识有了一个大体的印象。而本课时将重点讲解 JVM 的排查与优化,这样就会对 JVM 的知识点有一个完整的认识,从而可以更好地应用于实际工作或者面试了。 我们本课时的面试题是&#x…...
计算机科学的先驱者们
1. 艾伦图灵(Alan Turing): 图灵是计算机科学和人工智能的先驱之一,他提出了“图灵机”的概念,这是一种理论上的计算模型,奠定了现代计算机理论的基础。在第二次世界大战期间,图灵领导了一个团…...

哈希双指针
文章目录 一、哈希1.1两数之和1.2字母异位词分组1.3最长子序列 二、双指针2.1[移动零](https://leetcode.cn/problems/move-zeroes/description/?envTypestudy-plan-v2&envIdtop-100-liked)2.2[盛最多水的容器](https://leetcode.cn/problems/container-with-most-water/d…...

【网络】UDP协议
应用层协议是请求与响应服务,客户端的请求与服务器的响应是通过应用层传输到网络中的,但再实际上,应用层并不能直接通信,需要将数据进行报头的封装,向下层交付,贯穿整个协议栈。我们已经谈到应用层协议负责…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...