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

古典密码之凯撒密码

一、原理与历史

1.1 历史背景

凯撒密码由古罗马的盖乌斯・尤利乌斯・凯撒(Gaius Julius Caesar)所创,他在军事通信中广泛使用该密码,通常采用偏移量k=3的方式,这也是 “凯撒移位” 这一名称的由来。例如,他会把命令中的字母按此规则转换,以防止敌方截获信息后轻易读懂。

1.2 安全性分析

由于凯撒密码只有 26 种可能的偏移情况,在现代计算机技术下,可通过暴力破解(即尝试所有 26 种偏移量)在极短时间内解密,所以它仅适用于对安全性要求极低的简单场景,不能用于保护敏感信息。

1.3 原理

凯撒密码又被称为凯撒变换或者叫变换密码。它是一种替换加密,通过将明文中的所有字母都在字母表上向后(或向前)移动固定的数目称为密文。

例如当偏移量为3时
ABCDEFGHIJKLMNOPQRSTUVWXYZ
DEFGHIJKLMNOPQRSTUVWXYZABC

凯撒密码看似简单,但其不仅本身就是一种加密方式,也同样作为很多加密算法的重要过程。例如,凯撒密码通常作为维吉尼亚密码中的一个步骤。
如果将凯撒密码写成数字表达式,那么加密函数将为:
image
解密函数即为
image
其中,k为偏移量。可以发现该密码只有26种不同的可能,我们要解密只需要遍历所有的可能,找到有意义的一组字符串即可。

二、代码

对于上述的公式,我们可以利用python将其实现出来。对于这个加密解密方法我们只需要解决的一个问题是,比如当密钥是1时,Z怎么变成A,这是编程的关键。所以我们可以考虑
image
这样子相当于将字母A作为一开始的字母,在其基础上进行加减,变成其他字母。而ord(now)-ord(a)是告诉当前字母是第几个字母,加上其偏移量后进行模运算达到计算结果。

点击查看代码
#加密部分
def casar(text,k):result = ""for char in text:if char.isalpha():# 处理大写字母if char.isupper():result += chr((ord(char) - ord("A") + k) % 26 + ord("A"))# 处理小写字母else:result += chr((ord(char) - ord("a") + k) % 26 + ord("a"))else:# 非字母字符保持不变result += charreturn result#解密部分
def casar_decrypt(text,k):result = ""for char in text:if char.isalpha():# 处理大写字母if char.isupper():result += chr((ord(char) - ord("A") - k) % 26 + ord("A"))# 处理小写字母else:result += chr((ord(char) - ord("a") - k) % 26 + ord("a"))else:# 非字母字符保持不变result += charreturn resultdef casar_decrypt_no_k(text):for k in range(1,26):result = ""for char in text:if char.isalpha():# 处理大写字母if char.isupper():result += chr((ord(char) - ord("A") - k) % 26 + ord("A"))# 处理小写字母else:result += chr((ord(char) - ord("a") - k) % 26 + ord("a"))else:# 非字母字符保持不变result += charprint(f"密钥 {k} 的解密结果: {result}")returnwhile True:print("1.加密")print("2.解密")print("3.解密无密钥")print("4.退出")choice = input("请输入你的选择:")if choice == "1":text = input("请输入要加密的文本:")k = int(input("请输入加密密钥:"))print("加密后的文本为:" + casar(text,k))elif choice == "2":text = input("请输入要解密的文本:")k = int(input("请输入解密密钥:"))print("解密后的文本为:" + casar_decrypt(text,k))elif choice == "3":text = input("请输入要解密的文本:")casar_decrypt_no_k(text)elif choice == "4":breakelse:print("请输入正确的选择!")
http://www.hskmm.com/?act=detail&tid=24938

相关文章:

  • vi/vim文本编辑器
  • AI一周资讯 250926-251005
  • B3869 [GESP202309 四级] 进制转换-题解
  • 物理
  • springcloud gateway Error creating bean with name bootstrapImportSelectorConfiguration:
  • 完整教程:PyCharm接入DeepSeek,实现高效AI编程
  • Nginx的核心功能及实现
  • 2025焚烧炉厂家权威推荐,技术实力与市场口碑深度解析
  • 高考加油!UI界面生成器! - 教程
  • UnityShader入门精要-系统语义与函数体
  • 从价值博弈到价值原语博弈的跃迁:降维解析与升维求解的工程实现——声明Ai研究
  • 动归集训
  • 轻松发现开放重定向漏洞:从参数到Payload的完整指南
  • 记一次安装fail2ban - Lizo
  • 2022_easyRSA
  • 2025电缆厂家最新推荐排行榜:深度解析青岛一缆等六家优质企业实力,助力精准选购
  • 1 洛谷题解修正器
  • 防止语言模型性能倒退的新方法
  • Delphi 解决IniFiles中文乱码
  • Tarjan详解
  • RAG入门 - Retriever(1) - 指南
  • 分布式微服务系统架构第142集:全栈构建
  • 2025 年电永磁吊具制造厂家 TOP 企业品牌推荐排行榜全新发布,含大型电永磁吊具,全覆盖,起重,小型,钢板,钢板电永磁吊具公司推荐!
  • QBXT2025S刷题 Day4题
  • 实用指南:云原生时代 Kafka 深度实践:03进阶特性与最佳实践
  • 【VM虚拟机】VM新版本,虚拟机中键盘输入延迟卡顿
  • 2025石灰源头厂家最新推荐榜单:深度解析生石灰,熟石灰物流效率与综合实力
  • AtCoder Beginner Contest 426 游记
  • 如何把MCP服务集成到智能体?手把手教学(含视频教程)