经典密码学和现代密码学的结构及其主要区别(1)凯撒密码——附py代码

在这里插入图片描述
密码学是一门通过使用代码和密码来保护信息的艺术与科学,其历史可以追溯到数千年前。古典密码学代表了这一古老学科早期的篇章。早在计算机和现代加密算法出现之前,历史上的各个文明就依靠巧妙的方法来保护机密、安全通信以及获取战略优势。

古典密码学植根于古代文化的智慧,在历史的关键时刻对保护敏感信息发挥了关键作用。从古埃及的象形文字到凯撒密码,从文艺复兴时期的创新到美国独立战争中的密码学阴谋,古典密码学构成了现代密码学原理得以建立的历史背景。

以下是古典密码学的简要历史背景:

古代文明: 自古以来,密码技术就被用于各种目的,包括军事通信、外交以及保护敏感信息。最早有记录的密码学使用可以追溯到古埃及,当时象形文字有时会被加密以保护陵墓和纪念碑的内容。古希腊人也为古典密码学做出了重大贡献,像尤利乌斯·恺撒就使用简单的替换密码来保护敏感的军事信息。

中世纪欧洲: 在中世纪的欧洲,密码学的使用与君主和军事领袖开发的秘密代码和密码紧密相关。16 世纪布莱斯·德·维吉尼亚发明的维吉尼亚密码是古典密码学的一个显著进步,在数百年间都被认为是无法破解的。

文艺复兴和启蒙时代: 文艺复兴时期,人们对密码学的兴趣日益浓厚,学者和科学家在该领域取得了诸多进展。在启蒙时代,密码学成为外交通信和间谍活动的重要工具。

美国独立战争: 美国独立战争是古典密码学的一个重要历史背景。在战争期间,英美双方都使用了各种密码和密码本。像托马斯·杰斐逊这样的知名人物也开发了自己的密码系统,比如轮盘密码机。

19 世纪及以后: 19 世纪见证了更先进密码技术的发展,包括密码本的使用和更复杂的替换密码。在第二次世界大战期间,古典密码学发挥了重要作用,英国的“超机”计划成功破译了轴心国的通信。

在整个历史背景下,古典密码学作为一种保护敏感信息、维护机密性和在军事及外交事务中获取优势的手段不断发展。它为现代密码学的后来发展奠定了基础。

尽管古典密码在历史上具有重要意义,但它们缺乏保护现代数字通信和数据所必需的安全特性。随着技术的进步,攻击者的手段和能力也在增强,这使得古典密码无法满足当代的安全需求。基于可靠数学原理的现代密码算法和协议旨在为数字时代提供强大的安全保障。

凯撒密码 是最简单且最早为人所知的加密技术之一。它以尤利乌斯·恺撒的名字命名,据说他曾用它来传递机密信息。它易于理解,但安全性不高,容易受到暴力破解和频率分析的攻击。

这种密码是一种替换密码,通过将字母表中的字母向前或向后移动固定位数来进行加密和解密。凯撒密码的密钥是“移位值”或“密钥”,它决定了移位的量。例如,如果移位值为 3,那么 ‘A’ 将被加密为 ‘D’,‘B’ 被加密为 ‘E’,依此类推。而Z会绕回到C。比如明文"HELLO",移位3位,应该得到密文"KHOOR"。解密的话,移位-3位,恢复原文。如果移位位数超过26时应该对26取模,因为移位26位相当于没有移位。

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

def caesar_cipher(text, shift, mode='encrypt'):"""凯撒密码加密/解密函数:param text: 输入文本:param shift: 移位值:param mode: 'encrypt' 加密 或 'decrypt' 解密:return: 处理后的字符串"""result = []# 处理解密模式if mode == 'decrypt':shift = -shiftfor char in text:if char.isalpha():# 确定字符类型的基础ASCII码base = ord('A') if char.isupper() else ord('a')# 计算新字符new_char = chr((ord(char) - base + shift) % 26 + base)result.append(new_char)else:# 非字母字符保持不变result.append(char)return ''.join(result)# 测试示例
if __name__ == "__main__":# 加密示例plain_text = "Hello, World! 2025"shift_amount = 3encrypted = caesar_cipher(plain_text, shift_amount)print(f"加密结果: {encrypted}")  # 输出: Khoor, Zruog! 2025# 解密示例decrypted = caesar_cipher(encrypted, shift_amount, 'decrypt')print(f"解密结果: {decrypted}")  # 输出: Hello, World! 2025# 处理大偏移量(自动取模)big_shift = 29  # 29 % 26 = 3encrypted_big = caesar_cipher(plain_text, big_shift)print(f"大偏移加密: {encrypted_big}")  # 输出: Khoor, Zruog! 2025

运行结果:
在这里插入图片描述
这里编写了两个函数,一个用于加密,另一个用于解密。另外,需要考虑字符的范围,比如是否只处理大写字母或小写字母,或者同时处理两者。还需要处理非字母字符,比如空格、标点符号,这些通常保持不变。

首先处理输入的字符串。对于每个字符,如果是字母,就进行移位;如果不是,就保留原样。移位的时候,需要注意大小写,因为ASCII码中大写字母和小写字母的编码不同。比如,大写字母A的ASCII码是65,小写字母a是97。移位的时候,可以使用模运算来处理绕回的情况。例如,对于一个字符char,移位shift,加密后的字符可以通过公式:new_char = chr((ord(char) - base + shift) % 26 + base),其中base是大写或小写字母的起始ASCII码。

然后需要编写加密函数,接收明文和移位位数,返回密文。解密函数则可以使用相同的逻辑,但移位位数为负数,或者直接调用加密函数并传入负的移位位数。最后,需要一个主函数来让用户输入文本和移位位数,并输出加密或解密的结果。

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

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

相关文章

Python60日基础学习打卡D30

回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) # 直接导入 from random import randint print(randint(1, 10)) # 导入自定义库 import module m…

Linux利用多线程和线程同步实现一个简单的聊天服务器

1. 概述 本文实现一个基于TCP/IP的简单多人聊天室程序。它包含一个服务器端和一个客户端:服务器能够接收多个客户端的连接,并将任何一个客户端发来的消息广播给所有其他连接的客户端;客户端则可以连接到服务器,发送消息并接收来自…

ubuntu系统 | dify+ollama+deepseek搭建本地应用

1、安装 Ollama 下载并安装 Ollama (llm) wangqiangwangqiang:~$ curl -fsSL https://ollama.ai/install.sh | bash >>> Installing ollama to /usr/local >>> Downloading Linux amd64 bundle0.3% curl -fsSL https://ollama.ai/install.sh (下…

从纸质契约到智能契约:AI如何改写信任规则与商业效率?​——从智能合约到监管科技,一场颠覆传统商业逻辑的技术革命

一、传统合同的“低效困境”:耗时、昂贵、风险失控 近年来,全球商业环境加速向数字化转型,但合同管理却成为企业效率的“阿喀琉斯之踵”。据国际商会(International Chamber of Commerce)数据显示,全球企业…

【机器学习|学习笔记】基于生成对抗网络的孪生框架(GAN-based Siamese framework,GSF)详解,附代码。

【机器学习|学习笔记】基于生成对抗网络的孪生框架(GAN-based Siamese framework,GSF)详解,附代码。 【机器学习|学习笔记】基于生成对抗网络的孪生框架(GAN-based Siamese framework,GSF)详解,附代码。 文章目录 【机器学习|学习笔记】基于生成对抗网络的孪生框架(G…

UEFI Spec 学习笔记---33 - Human Interface Infrastructure Overview---33.2.6 Strings

33.2.6 Strings UEFI 环境中的 string 是使用 UCS-2 格式定义,每个字符由 16bit 数据表示。对于用户界面,strings 也是一种可以安装到 HIIdatabase 的一种数据。 为了本土化,每个 string 通过一个唯一标识符来识别,而每一个标识…

Stable Diffusion 学习笔记02

模型下载网站: 1,LiblibAI-哩布哩布AI - 中国领先的AI创作平台 2,Civitai: The Home of Open-Source Generative AI 模型的安装: 将下载的sd模型放置在sd1.5的文件内即可,重启客户端可用。 外挂VAE模型&#xff1a…

并发编程(5)

抛异常时会释放锁。 当线程在 synchronized 块内部抛出异常时,会自动释放对象锁。 public class ExceptionUnlockDemo {private static final Object lock new Object();public static void main(String[] args) {Thread t1 new Thread(() -> {synchronized …

贵州某建筑物挡墙自动化监测

1. 项目简介 某建筑物位于贵州省某县城区内,靠近县城主干道,周边配套学校、医院、商贸城。建筑物临近凤凰湖、芙蓉江等水系,主打“湖景生态宜居”。改建筑物总占地面积:约5.3万平方米;总建筑面积:约15万平…

6个月Python学习计划:从入门到AI实战(前端开发者进阶指南)

作者:一名前端开发者的进阶日志 计划时长:6个月 每日学习时间:2小时 覆盖方向:Python基础、爬虫开发、数据分析、后端开发、人工智能、深度学习 📌 目录 学习目标总览每日时间分配建议第1月:Python基础与编…

【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit (3)

1.问题描述: 通过CardRecognition识别身份证拍照拿到的照片地址,使用该方法获取不到图片文件,请问如何解决? 解决方案: //卡证识别实现页,文件名为CardDemoPage,需被引入至入口页 import { …

AI全域智能监控系统重构商业清洁管理范式——从被动响应到主动预防的监控效能革命

一、四维立体监控网络技术架构 1. 人员行为监控 - 融合人脸识别、骨骼追踪与RFID工牌技术,身份识别准确率99.97% - 支持15米超距夜间红外监控(精度0.01lux) 2. 作业过程监控 - UWB厘米级定位技术(误差<0.3米&…

安全强化的Linux

SElinux简介 SELinux是security-Enhanced Linux的缩写,意思是安全强化的linux SELinux主要由美国国家安全局(NSA)开发,当初开发的目的是为了避免资源的误用。传统的访问控制在我们开启权限后,系统进程可以直接访问 当我们对权限设置不严谨时,这种访问方式就是系统的安全漏洞 在…

机器学习第十六讲:K-means → 自动把超市顾客分成不同消费群体

机器学习第十六讲:K-means → 自动把超市顾客分成不同消费群体 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细手把手指南 K-me…

spring中yml配置上下文与tomcat等外部容器不一致问题

结论:外部优先级大于内部 在 application.yml 中配置了: server:port: 8080servlet:context-path: /demo这表示你的 Spring Boot 应用的上下文路径(context-path)是 /demo,即访问你的服务时,URL 必须以 /d…

论文研读——《AnomalyGPT:使用大型视觉语言模型检测工业异常》

这篇论文提出了 AnomalyGPT,一个基于大型视觉语言模型的工业异常检测框架,首次将通用多模态对话能力引入工业视觉场景,通过引入图像解码器增强像素级感知,设计 Prompt 学习器实现任务自适应控制,并利用合成异常样本解决…

供应链安全检测系列技术规范介绍之一|软件成分分析

软件成分分析的概念及意义 软件成分分析Software Compostition Analysis(SCA)是一种用于管理开源组件应用安全的方法。软件成分分析系统可以快速跟踪和分析应用软件的开源组件,发现相关组件、支持库以及它们之间直接和间接依赖关系&#xff0…

conda更换清华源

1、概览 anaconda更换速度更快、更稳定的下载源,在linux环境测试通过。 2、conda源查看 在修改之前可以查看下现有conda源是什么,查看conda配置信息,如下: cat ~/.condarc 可以看到你的conda源,以我的conda源举例&am…

Docker配置容器开机自启或服务重启后自启

要将一个 Docker 容器设置为开机自启,你可以使用 docker update 命令或配置 Docker 服务来实现。以下是两种常见的方法: 方法 1:使用 docker update 设置容器自动重启 使用 docker update 设置容器为开机自启 你可以使用以下命令&#xff0c…

Flink 的水印机制

Apache Flink 的 水印机制(Watermark Mechanism) 主要用于解决 事件时间流中的乱序问题(Out-of-Order Events),确保窗口(Window)能够在合适的时间触发计算,从而提供准确、一致的处理…