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

Python趣味编程:手把手带你玩转凯撒到仿射古典密码(收藏版)

Python趣味编程手把手带你玩转凯撒到仿射古典密码收藏版本文通过Python实战带你轻松入门古典密码学。从不到10行的凯撒密码到需要模运算的仿射密码用代码直观展示移位加密原理。文章包含开发环境设置、加密解密实现、频率分析破解等实战案例并揭示这些古老密码对现代算法如AES的启发。特别适合零基础小白通过动手编程自然理解模运算、逆元等数学概念附赠密码工具包开发思路和进阶练习。用Python实战古典密码从凯撒到仿射的趣味编程之旅密码学总给人一种高深莫测的印象尤其是那些充满数学符号的教科书常让初学者望而生畏。但你知道吗用几十行Python代码就能亲手实现凯撒大帝用来传递军情的加密方法还能用同样的思路破解简单的密文。本文将带你用程序员的视角重新认识这些古老的加密艺术——不需要死记硬背数学公式而是在敲代码的过程中自然理解模运算、逆元等概念。1. 开发环境准备工欲善其事必先利其器。我们选择Python不仅因为它语法简洁更因其丰富的运算符和数据结构特别适合演示密码算法。建议使用Python 3.8版本任何编辑器或IDE都可以但Jupyter Notebook的交互特性可能更适合边学边试。安装完成后先确认几个基础工具包python --version # 确认版本 pip install numpy # 可选用于高级数学运算提示虽然本文会从基础讲起但假设读者已经了解Python的基本语法如变量、循环和函数定义。如果遇到不熟悉的语法可以随时查阅Python官方文档。2. 凯撒密码移位加密的活化石公元前58年凯撒在征服高卢的战争中发明了这种将字母按固定位数移位的加密方法。现代程序员可以用不到10行代码还原这个古老智慧def caesar_cipher(text, shift): result [] for char in text: if char.isupper(): result.append(chr((ord(char) shift - 65) % 26 65)) elif char.islower(): result.append(chr((ord(char) shift - 97) % 26 97)) else: result.append(char) return .join(result) # 示例用法 plaintext Attack at dawn! shift 3 ciphertext caesar_cipher(plaintext, shift) # 加密 print(ciphertext) # 输出: Dwwdfn dw gdzq!这段代码的核心在于模运算% 26它确保了字母表循环移位——当’Z’后移3位时会回到’C’。要解密只需使用负的shift值original caesar_cipher(ciphertext, -shift) print(original) # 输出: Attack at dawn!凯撒密码的脆弱性体现在几个方面仅有26种可能的密钥shift值字母频率分析可以轻松破解无法抵抗暴力穷举攻击3. 仿射密码凯撒的数学升级版仿射变换将凯撒密码的简单移位升级为线性变换其加密公式为E(x) (a*x b) mod 26其中a必须与26互质即gcd(a,26)1这样才能保证存在乘法逆元用于解密。先实现一个求最大公约数的函数这是检查a是否合法的前提def gcd(a, b): while b ! 0: a, b b, a % b return a完整的仿射加密实现def affine_encrypt(text, a, b): result [] for char in text: if char.isupper(): x ord(char) - 65 result.append(chr((a * x b) % 26 65)) elif char.islower(): x ord(char) - 97 result.append(chr((a * x b) % 26 97)) else: result.append(char) return .join(result)解密需要找到a的模逆元a⁻¹满足(a * a⁻¹) mod 26 1。扩展欧几里得算法可以高效计算这个值def modinv(a, m): g, x, y extended_gcd(a, m) if g ! 1: raise ValueError(模逆不存在) return x % m def extended_gcd(a, b): if a 0: return (b, 0, 1) else: g, y, x extended_gcd(b % a, a) return (g, x - (b // a) * y, y)现在可以完成解密函数def affine_decrypt(ciphertext, a, b): a_inv modinv(a, 26) result [] for char in ciphertext: if char.isupper(): y ord(char) - 65 result.append(chr((a_inv * (y - b)) % 26 65)) elif char.islower(): y ord(char) - 97 result.append(chr((a_inv * (y - b)) % 26 97)) else: result.append(char) return .join(result)参数选择示例合法参数a5, b8因为gcd(5,26)1非法参数a4, b7gcd(4,26)2≠1# 完整示例 a, b 5, 8 plain Hello Cryptography! cipher affine_encrypt(plain, a, b) # Jqttw Kpixgbpikjca! decrypted affine_decrypt(cipher, a, b) # 恢复原文4. 从古典到现代密码学思维演进虽然这些古典密码已不再安全但它们蕴含的核心思想在现代密码学中依然闪耀古典概念现代对应应用实例字母移位比特置换DES加密的P-box仿射变换线性扩散层AES的MixColumns多表代换非线性替换AES的S-box密钥空间安全参数RSA的模数位数现代AES算法虽然复杂但其核心的SubBytes阶段本质上也是一种替换尽管是在GF(2⁸)有限域上而ShiftRows则继承了凯撒移位的精髓。密码设计黄金法则混淆(Confusion)使密钥与密文关系复杂扩散(Diffusion)让明文单个比特影响多个密文比特密钥空间足够大抵抗暴力破解算法公开安全只依赖于密钥保密5. 实战破解凯撒密码理解加密的最好方式就是尝试破解。对于凯撒密码即使不知道shift值我们也能通过频率分析或暴力尝试来破译def crack_caesar(ciphertext): # 英语字母频率表 freq [8.2, 1.5, 2.8, 4.3, 12.7, 2.2, 2.0, 6.1, 7.0, 0.2, 0.8, 4.0, 2.4, 6.7, 7.5, 1.9, 0.1, 6.0, 6.3, 9.1, 2.8, 1.0, 2.4, 0.2, 2.0, 0.1] best_shift 0 min_diff float(inf) for shift in range(26): decrypted caesar_cipher(ciphertext, -shift) count [0]*26 total 0 for c in decrypted.lower(): if a c z: count[ord(c)-97] 1 total 1 if total 0: continue # 计算卡方统计量 chi_sq 0 for i in range(26): observed count[i] expected total * freq[i] / 100 chi_sq (observed - expected)2 / expected if chi_sq min_diff: min_diff chi_sq best_shift shift return best_shift这个破解器通过比较解密文本与英语字母的标准频率分布找出最可能的shift值。虽然对短文本可能不准但对于超过100个字母的密文通常能正确识别。6. 密码学编程的常见陷阱在实现密码算法时有几个容易踩坑的地方值得特别注意字符编码问题ASCII码与字母序号的转换要准确A65还是0非字母字符空格、标点的处理策略Unicode字符可能导致的意外行为模运算细节# 负数取模的两种处理方式 -5 % 26 # Python中结果为21 math.fmod(-5, 26) # 结果为-5.0性能考量对于长文本纯Python实现可能较慢。可以考虑使用字符串的translate方法对numpy数组进行向量化操作对性能关键部分用Cython加速一个优化后的凯撒加密版本def caesar_fast(text, shift): shift shift % 26 lower str.maketrans( abcdefghijklmnopqrstuvwxyz, abcdefghijklmnopqrstuvwxyz[shift:] abcdefghijklmnopqrstuvwxyz[:shift]) upper str.maketrans( ABCDEFGHIJKLMNOPQRSTUVWXYZ, ABCDEFGHIJKLMNOPQRSTUVWXYZ[shift:] ABCDEFGHIJKLMNOPQRSTUVWXYZ[:shift]) return text.translate(lower).translate(upper)7. 扩展应用构建密码工具包将上述函数封装成类可以创建一个简单的密码工具包class ClassicalCipher: def __init__(self): self.english_freq [...] # 频率表 def caesar(self, text, shift, decryptFalse): if decrypt: shift -shift # 实现代码... def affine(self, text, a, b, decryptFalse): if decrypt: # 解密逻辑 else: # 加密逻辑 staticmethod def gcd(a, b): # 实现代码... def frequency_analysis(self, text): # 统计字母频率 return freq_dict def crack_caesar(self, ciphertext): # 破解实现 return most_likely_shift这个类可以进一步扩展支持维吉尼亚密码、置换密码等其他古典加密方法。对于想继续探索的读者可以考虑实现多表代换的维吉尼亚密码基于关键词的字母表置换结合加密与文件IO的完整应用简单的加密通信协议密码学编程最迷人的地方在于你能亲眼看到抽象的数学概念如何转化为实际可运行的代码。当你的程序成功解密一段古老密文时那种穿越时空与凯撒对话的奇妙感觉是单纯理论学习无法给予的。《网络安全从零到精通全套学习大礼包》96节从入门到精通的全套视频教程免费领取如果你也想通过学网络安全技术去帮助就业和转行我可以把我自己亲自录制的96节 从零基础到精通的视频教程以及配套学习资料无偿分享给你。网络安全学习路线图想要学习 网络安全作为新手一定要先按照路线图学习方向不对努力白费。对于从来没有接触过网络安全的同学我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线大家跟着这个路线图学习准没错。配套实战项目/源码所有视频教程所涉及的实战项目和项目源码学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取

相关文章:

Python趣味编程:手把手带你玩转凯撒到仿射古典密码(收藏版)

Python趣味编程:手把手带你玩转凯撒到仿射古典密码(收藏版) 本文通过Python实战,带你轻松入门古典密码学。从不到10行的凯撒密码到需要模运算的仿射密码,用代码直观展示移位加密原理。文章包含开发环境设置、加密解密实…...

Multisim 14.0 仿真实战:从零搭建晶体管集电极调幅电路,手把手教你测调幅度

Multisim 14.0 仿真实战:从零搭建晶体管集电极调幅电路,手把手教你测调幅度 在电子通信领域,调幅技术作为最基础的模拟调制方式之一,其原理理解与实际电路实现往往存在巨大鸿沟。许多初学者能够背诵调幅波公式,却在仿真…...

Fast SAM C++推理部署实战:onnxruntime静态维度优化与性能调优

1. Fast SAM模型与onnxruntime部署基础 Fast SAM作为计算机视觉领域的高效分割模型,相比原版SAM模型实现了50倍的速度提升。这个提升主要来自两个关键设计:一是采用轻量化的CNN架构替代Transformer,二是仅使用SA-1B数据集的2%进行训练。在实际…...

从 OpenClaw 到端侧 AI:低算力智能体架构设计

子玥酱 (掘金 / 知乎 / CSDN / 简书 同名) 大家好,我是 子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚…...

实战HI3516A:基于Cadence Sigrity的PCB电源树(PowerTree)自动化提取与优化

1. HI3516A与PowerTree基础认知 第一次接触海思HI3516A芯片的PCB设计时,我被它复杂的电源网络搞得头晕眼花。这块芯片广泛应用于智能摄像头、边缘计算设备,其多电压域设计让电源分配网络(PowerTree)像迷宫一样。简单来说,PowerTree就是描述电…...

Maven构建Java项目时遇到MalformedInputException?手把手教你排除pom.xml配置陷阱

Maven构建Java项目时遇到MalformedInputException?手把手教你排除pom.xml配置陷阱 最近在重构一个金融支付系统时,我遇到了一个令人头疼的问题——Maven构建时频繁抛出MalformedInputException。这个错误看似简单,却让团队浪费了整整两天时间…...

如何高效使用WebSite-Downloader:Python网站整站下载终极指南

如何高效使用WebSite-Downloader:Python网站整站下载终极指南 【免费下载链接】WebSite-Downloader 项目地址: https://gitcode.com/gh_mirrors/web/WebSite-Downloader WebSite-Downloader是一款功能强大的Python网站整站下载工具,能够快速构建…...

springAI中tools的使用

1.使用Tool注解注册toolTool(description "获取当前日期和时间,当用户询问时间、日期时调用。")public String getCurrentDateTime() {log.info("tools调用获取时间");return LocalDateTime.now().format(DateTimeFormatter.ofPattern("y…...

怎样一键下载30+文库平台文档:面向普通用户的终极免费解决方案

怎样一键下载30文库平台文档:面向普通用户的终极免费解决方案 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就…...

香橙派系统镜像高效备份与批量烧录实战指南

1. 香橙派系统镜像备份的必要性与场景分析 第一次拿到香橙派开发板时,很多人都会直接使用官方提供的系统镜像。但随着使用深入,我们往往需要安装各种软件、配置开发环境、部署项目代码。这时候如果每次交付新设备都要从头配置,不仅耗时费力&a…...

图像处理基础:为什么人眼看到的灰度图比简单平均法更自然?(RGB权重揭秘)

图像处理基础:为什么人眼看到的灰度图比简单平均法更自然?(RGB权重揭秘) 当我们浏览黑白照片时,很少有人会思考这些灰度图像背后的科学原理。为什么有些黑白照片看起来特别自然,而另一些则显得生硬&#xf…...

桌面端 Claw 个人接入指南

pagehelper整合 引入依赖com.github.pagehelperpagehelper-spring-boot-starter2.1.0compile编写代码 GetMapping("/list/{pageNo}") public PageInfo findAll(PathVariable int pageNo) {// 设置当前页码和每页显示的条数PageHelper.startPage(pageNo, 10);// 查询数…...

使用Docker Compose V2快速部署Nextcloud私有云盘

1. 为什么选择Docker Compose V2部署Nextcloud 在开始之前,我们先聊聊为什么现在推荐使用Docker Compose V2来部署Nextcloud。Docker Compose V2是Docker官方在2021年推出的新一代编排工具,相比老旧的V1版本,它有几个明显的优势: …...

别再只用NDVI了!用Python+Sentinel-2数据实战对比5种常用植被指数(附代码)

别再只用NDVI了!用PythonSentinel-2数据实战对比5种常用植被指数(附代码) 遥感植被指数是农业、林业和生态监测的重要工具。许多从业者习惯性地使用NDVI(归一化差异植被指数)作为"万能指标",但实…...

基于 Docker 与 OpenStreetMap 构建高性能离线地图瓦片服务

1. 为什么需要离线地图瓦片服务 最近几年我参与过不少需要地图服务的项目,发现很多场景下在线地图服务并不靠谱。比如在偏远地区做地质勘探时,网络信号时有时无;给政府单位做内网系统时,数据安全要求必须完全隔离外网;…...

Spring Boot项目Docker化后,curl本地接口报‘Connection reset by peer’?别急着改防火墙,先检查这个配置

Spring Boot项目Docker化后curl本地接口报Connection reset by peer的深度排查指南 当你兴冲冲地将Spring Boot应用打包成Docker镜像,准备在本地环境测试API接口时,却在执行curl 127.0.0.1:9997/doc.html后收到冰冷的(56) Recv failure: Connection rese…...

Navicat自动化生成Word数据库设计文档实战

1. 为什么需要自动化生成数据库设计文档 每次接手新项目时,最头疼的就是翻看那些零散的数据库表结构说明。记得去年参与一个电商系统重构,光是整理200多张表的字段说明就花了整整两周时间,期间还要不断和原开发团队确认字段含义。这种重复性工…...

Win10下Tex Live安装提速秘籍:国内四大镜像站实测对比(附uGet配置技巧)

Win10下Tex Live安装提速全攻略:镜像站选择与uGet高效配置 对于科研工作者和LaTeX初学者来说,在Windows平台安装Tex Live时最令人头疼的莫过于漫长的下载等待。我曾经历过整整一下午盯着进度条几乎不动的绝望,直到发现镜像站和多线程下载工具…...

VinXiangQi:重新定义中国象棋智能对弈的革命性开源方案

VinXiangQi:重新定义中国象棋智能对弈的革命性开源方案 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi 在数字化的浪潮中,传统棋类…...

告别抓瞎:手把手教你用eBPF uprobe给Go/Python应用函数调用‘上监控’

深度实践:用eBPF uprobe实现Go/Python应用函数级监控 当线上服务出现性能瓶颈时,大多数开发者习惯用日志埋点或抽样 profiling 来定位问题。这种方法就像在黑暗房间里用手电筒找钥匙——效率低下且容易遗漏关键细节。而 eBPF 的 uprobe 技术相当于为整个…...

三大技术路径解析:JavaScript直链提取工具如何重塑网盘下载体验

三大技术路径解析:JavaScript直链提取工具如何重塑网盘下载体验 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云…...

Gazebo中高效加载DEM高程图的实用技巧与常见问题解决

1. 为什么你的Gazebo DEM高程图加载总是失败? 第一次在Gazebo里加载DEM高程图时,我盯着空荡荡的仿真界面整整发呆了半小时——明明按照教程操作,为什么就是显示不出来?后来才发现,DEM加载是个典型的"看着简单&…...

Word-MCP-Server进阶指南 | 在Cursor中打造智能Word自动化工作流

1. 为什么需要Word文档自动化 作为一个常年和文档打交道的开发者,我深刻理解手动处理Word文档的痛苦。每次要批量修改格式、插入表格或者调整样式,都得重复点击鼠标,效率低还容易出错。直到发现了Word-MCP-Server这个神器,配合Cu…...

Windows右键菜单优化攻略:用ContextMenuManager打造高效工作环境

Windows右键菜单优化攻略:用ContextMenuManager打造高效工作环境 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾经被Windows右键菜单中那些…...

2025届毕业生推荐的五大降重复率方案横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在人工智能交互进程里,指令冗余常常致使响应偏离预期,想要降低AI指令…...

2026届必备的六大降重复率方案实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于当下人工智能内容生成技术被广泛运用,这样的背景情形之中,好些平台…...

Lingyuxiu MXJ LoRA进阶教程:负面Prompt强化NSFW过滤与画质提升方法

Lingyuxiu MXJ LoRA进阶教程:负面Prompt强化NSFW过滤与画质提升方法 1. 引言:从“能用”到“好用”的关键一步 如果你已经成功部署了Lingyuxiu MXJ LoRA创作引擎,并且用它生成了一些人像作品,那么恭喜你,你已经迈出了…...

2025届必备的降重复率方案实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 随着人工智能生成内容越来越广泛地被使用,降低文本AI检测率的工具出现了&#xf…...

八大网盘直链解析神器:让文件下载告别等待的智能助手

八大网盘直链解析神器:让文件下载告别等待的智能助手 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…...

ACSL-6310-06TE,多通道双向15MBd高速数字逻辑门光耦合器

简介今天我要向大家介绍的是 Broadcom 的光耦合器——ACSL-6310-06TE。它是一款三通道、双向(2/1配置)高速数字逻辑门光耦合器。该器件采用专有的GaAsP LED背发射设计,内部集成具有高增益和高带宽的两级放大器,输出端为肖特基钳位…...