当前位置: 首页 > news >正文

经典密码学和现代密码学的结构及其主要区别(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)

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

相关文章:

  • 49 python Matplotlib之Pandas 数据可视化
  • 动态规划-740.删除并获取节点-力扣(LeetCode)
  • Trae+12306 MCP,10分钟搭建行程可视化助手
  • MDK的编译过程及文件类型全解
  • 同一无线网络下的设备IP地址是否相同?
  • FFTW图像处理入门
  • Jenkins 2.426.2配置“构建历史的显示名称,加上包名等信息“
  • 多路径传输(比如 MPTCP)控制实时突发
  • 通过上传使大模型读取并分析文件实战
  • FPGA高效验证工具Solidify 8.0:全面重构图形用户界面
  • 安全运营与威胁对抗体系
  • SmartSoftHelp 之 SQL Server 数据库安全备份与安全还原详解---深度优化版:SmartSoftHelp DeepCore XSuite
  • AtCoder Beginner Contest 406(ABCD)
  • 《Python语言程序设计》第4章第7题,这次利用之前学过的第7章的内容使用对象和类,来修改这道题
  • 跟Gemini学做PPT:字号选择
  • 智能交易革命:基于Python构建全自动加密货币交易系统(CCXT/TensorTrade实战指南)
  • CyberStrikeLab-Lab9-WriteUp
  • AI 数据采集实战指南:基于 Bright Data 快速获取招标讯息
  • C++高频面试考点 -- 智能指针
  • Android Studio历史版本下载方法
  • 给企业做网站的公司西安/谷歌安装器
  • 深圳网站建设 东莞网站建设/软文营销代理
  • html欧美网站模板/最近军事新闻热点大事件
  • 网站开发建设挣钱吗/官网站内推广内容
  • 网站说服力营销型网站策划/推广普通话文字素材
  • 网站建设地位/站长统计幸福宝2022年排行榜