揭秘《庆余年算法番外篇》:范闲如何使用维吉尼亚密码解密二皇子密信

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣!

  • 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注
    在这里插入图片描述

  • 导航

    • LeetCode解锁1000题: 打怪升级之旅:每题都包括3-5种算法,以及详细的代码实现,刷题面试跳槽必备
    • 漫画版算法详解:通过漫画的形式和动态GIF图片把复杂的算法每一步进行详细可视解读,看一遍就掌握
    • python源码解读:解读python的源代码与调用关系,快速提升代码质量
    • python数据分析可视化:企业实战案例:企业级数据分析案例与可视化,提升数据分析思维和可视化能力
    • 程序员必备的数学知识与应用:全面详细的介绍了工程师都必备的数学知识

期待与您一起探索技术、持续学习、一步步打怪升级 欢迎订阅本专栏❤️❤️

背景设定

在《庆余年》中,范闲不仅要面对复杂的政治斗争,还要应对各种阴谋和背叛。在某一集中,范闲截获了一封由二皇子发出的密文。密文中只有一串汉字,通过解密可以揭示重要情报。范闲需要利用维吉尼亚密码解密这封密文,从而揭露二皇子的阴谋。

场景描述

在这里插入图片描述

范闲在一个隐秘的地点,收到了一封由二皇子发出的密文。信中包含的密文是:

金 达 达 皇 皇 子 子

范闲知道,这些汉字是通过一种密码加密的,需要找到密钥才能解密出明文。

解密过程:使用维吉尼亚密码

维吉尼亚密码是一种经典的多表代替密码,通过使用一个密钥,将明文中的每个字符与密钥对应字符进行位移加密,生成密文。解密时则使用相同的密钥,将密文字母逆向位移还原为明文。

维吉尼亚密码的基本原理
  1. 密钥:维吉尼亚密码使用一个重复的密钥对明文进行加密。
  2. 加密过程:每个明文字母通过与密钥字母的位移相结合生成密文。
  3. 解密过程:解密时,需要使用相同的密钥,将密文字母逆向位移还原为明文。
    在这里插入图片描述

解密步骤

  1. 准备密文和密钥

    • 密文: 金 达 达 皇 皇 子 子
    • 密钥: 秘 密
  2. 将汉字转换为数字

    • 使用一个简单的映射,将汉字转换为数字:
      • -> 1, -> 2, -> 3, -> 4, -> 5, -> 6, -> 7
      • -> 1, -> 2
  3. 将密钥转换为数字

    • -> 1, -> 2
  4. 解密公式

    • 给定密文字符 ( C ) 和密钥字符 ( K ),明文字符 ( P ) 的计算公式如下:
      [ P = (C - K + N) \mod N ]
    • 其中 ( N ) 是汉字表的大小,这里假设 ( N = 7 )。

解密计算

我们假设汉字的映射为:

黄 -> 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)

场景细节

  1. 范闲收到密文:范闲在书房中仔细阅读密文,密文内容是“金达达皇皇子子”。
  2. 范闲识别密钥:范闲知道二皇子惯用的密钥是“秘密”。
  3. 范闲使用维吉尼亚密码进行解密:范闲使用密钥“秘密”对密文进行解密。
  4. 解密后的明文:通过维吉尼亚密码解密,范闲得到了明文“黄金送达二皇子”。

总结

本故事纯属虚构,如有雷同,纯属胡编乱造。通过这个具体场景,我们展示了如何使用维吉尼亚密码解密“金达达皇皇子子”,并将其转换为明文“黄金送达二皇子”。这种加密和解密过程使得原文更加复杂,增加了破解难度。在《庆余年》的场景中,范闲可以通过破解维吉尼亚密码解密出二皇子的阴谋。这个例子不仅增强了故事的紧张感和趣味性,也让读者更好地理解经典密码学算法在实际中的应用。希望这些详细的步骤和算法展示能够帮助读者更好地理解和应用这些技术。

🌹🌹如果觉得这篇文对你有帮助的话,记得一键三连关注、赞👍🏻、收藏是对作者最大的鼓励,非常感谢 ❥(^_-)

❤️❤️关注公众号 数据分析螺丝钉 回复 学习资料 领取高价值免费学习资料❥(^_-)
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/15774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Trino On K8S(Dockerfile)[建议]

文章目录 Trino On K8S(Dockerfile)[建议]前期准备基础镜像下载java构建 Dockerfile编写 bootstrap.sh 脚本构建镜像 部署 Trino下载 Helm 源修改配置启动 增加 Hive Catalog挂载 core-site.xml hdfs-site.xml 配置修改 coordinator/worker configmap修改…

Python开发Android手机APP

Kivy是一个开源的Python库,用于快速开发跨平台的触摸应用程序。它特别适合创建具有图形用户界面(GUI)的应用,尤其是那些需要在多种操作系统(如Windows、macOS、Linux、Android和iOS)上运行的多点触控应用。…

【yolov10】使用自己的数据集训练目标检测模型

【yolov10】使用自己的数据集训练目标检测模型 一、anaconda安装二、环境配置三、数据集制作1、labelimg的安装2、使用labelimg 四、正片1、下载yolov10源码2、数据集目录3、训练4、推理 一、anaconda安装 直接参考前一篇博客: https://blog.csdn.net/m0_71523511/…

42、Flink 关于窗口状态大小的考量

关于状态大小的考量 窗口可以被定义在很长的时间段上(比如几天、几周或几个月)并且积累下很大的状态,当估算窗口计算的储存需求时,注意如下: Flink 会为一个元素在它所属的每一个窗口中都创建一个副本。 因此&#x…

融捷科技(武汉)有限公司 面试总结/华润医药商业集团武汉有限公司武汉共享中心 软件开发面试总结/深圳市卓讯信息技术有限公司 软件开发面试总结

深圳市卓讯信息技术有限公司/Java高级/技术经理 自我介绍对方公司情况介绍最大的并发的项目介绍下为了解决并发做了哪些事情最熟悉的项目介绍下上千万的数据,如果通过身份证号码的后六位查询到对应条件的数据,要求在2秒内查询出结果。。。。。瞎扯淡部分融捷科技(武汉)有限…

击穿盲点——【网络安全】社会工程学中的网络欺骗

社会工程学起源于上世纪60年代左右,是一种通过人际交流的方式来获得情报的非技术渗透手段。这种手段无需过多技术要求,却非常有效,目前已成为危害企业网络安全的重大威胁之一。著名黑客凯文米特尼克在《反欺骗的艺术》中曾提到,人…

SpringBoot+Vue开发记录(七)-- 跨域文件与Restful风格

本篇文章的主要内容是关于项目的跨域配置和给项目添加restful风格接口。 重点是文件粘贴 文章目录 一、 跨域二、Restful风格1. 什么是restful风格?2. 项目文件结构3. 新建文件4. 在Controller中进行修改 一、 跨域 跨域问题暂时也就那样,解决方法就是…

云计算-No-SQL 数据库 (No-SQL Database)

DynamoDB简介 (Introduction to DynamoDB) AWS DynamoDB 是亚马逊提供的一种 NoSQL 数据库,适用于需要快速访问的大规模应用程序。NoSQL 数据库指的是非关系型数据库(或许应该称为“非关系数据库”)。关系型数据库是你之前可能使用过的熟悉的…

深入Django项目实战与最佳实践

title: 深入Django项目实战与最佳实践 date: 2024/5/19 21:41:38 updated: 2024/5/19 21:41:38 categories: 后端开发 tags: Django 基础项目实战最佳实践数据库配置静态文件部署高级特性 第一章:Django项目架构与设计原则 Django框架概述 Django是一个高级的P…

Java 8 新特性:深入理解 Lambda 表达式的强大与应用

Java 8 新特性:深入理解 Lambda 表达式的强大与应用 Lambda 表达式是 Java 8 引入的重要特性之一,它允许将匿名函数(即无名称的函数)作为参数传递给方法,简化了代码的编写,使代码更加简洁和易读。本文将深…

Next.js里app和pages文件夹的区别

最近开始学 Next.js,因为纯自学,有时候网上找到的学习资料都是几年前的,难免会有点 outdated,因此当自己创建的项目结构和视频里呈现的结构不一致时,难免会有点困惑。 例如,今天遇到的第一个问题就是&…

CAD二次开发(2)-将直线对象添加到CAD图形文件

1. 准备工作 创建一个类库项目,如下: 2. 分析Line对象 Line类的初始化方法和参数 using Autodesk.AutoCAD.DatabaseServices; Line line new Line();Line 继承Curve 继承Entity 继承DBObject 继承Drawable 继承RXObject 初始化方法有两个&#xf…

大模型分布式训练并行技术分享

目前业内解决大模型问题,基本以多节点、分布式方案为主。分布式方案具体的实施时,又分为数据并行、参数并行、流水线并行等,针对具体的业务场景采取合适的并行方案方可带来更高的效率。 后续结合业内主流的分布式框架,具体介绍各种…

数据库(5)——DDL 表操作

表查询 先要进入到某一个数据库中才可使用这些指令。 SHOW TABLES; 可查询当前数据库中所有的表。 表创建 CREATE TABLE 表名( 字段1 类型 [COMMENT 字段1注释] ...... 字段n 类型 [COMMENT 字段n注释] )[COMMENT 表注释]; 例如,在student数据库里创建一张studen…

网络安全等级保护:正确配置 Linux

正确配置 Linux 对Linux安全性的深入审查确实是一项漫长的任务。原因之一是Linux设置的多样性。用户可以使用Debian、Red Hat、Ubuntu或其他Linux发行版。有些可能通过shell工作,而另一些则通过某些图形用户界面(例如 KDE 或 GNOME)工作&…

APP安全测试汇总【网络安全】

APP安全测试汇总 一.安装包签名和证书 1.问题说明 检测 APP 移动客户端是否经过了正确签名,通过检测签名,可以检测出安装包在签名后是否被修改过。如 果 APP 使⽤了 debug 进⾏证书签名,那么 APP 中⼀部分 signature 级别的权限控制就会失效…

Unity 生成物体的几种方式

系列文章目录 unity工具 文章目录 系列文章目录前言👉一、直接new的方式创建生成1-1.代码如下1-2. 效果图 👉二、使用Instantiate创建生成(GameObject)2-1.代码如下2-2.效果如下图 👉三.系统CreatePrimitive创建生成3…

Java 18 的应用

Java 18的发布时间是2022年3月22日。这个版本带来了许多新的特性和改进,包括模式匹配增强、协程支持、SIMD指令支持等,这些功能为开发人员提供了更多的灵活性和控制力,有助于他们构建出更高效、可靠的应用程序。 Java 18 的新功能为多种应用…

nodejs设置强制缓存,协商缓存

协商缓存(Conditional Requests) 协商缓存指的是浏览器每次请求时携带上次请求标识(如 Last-Modified 或 ETag),服务器通过这些标识判断资源是否修改,如果没有修改,则返回 304 Not Modified 响…