什么是恺撒密码?如何用Python实现它(36)

news/2024/6/17 11:27:02 标签: python

小朋友们好,大朋友们好!

我是猫妹,一名爱上Python编程的小学生。

欢迎和猫妹一起,趣味学Python。

今日主题

猫妹目前在看的,ycl Python等级考试五级教材,有一章是介绍恺撒密码的。

今天,咱们就学习下什么是恺撒密码,如何用Python实现它。

恺撒密码

在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。

它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。

例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。

这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。

你懂了吗?

举个例子吧!

我们先看上图上半部分

明文ABCD~XYZ,密钥(加密规)则是+3,那么密文是DEF~XYZABC

加密规则可以使加3,也可以使加任意整数,如果超过26个字符,则需要对26取余。也就是上图的下半部分。

明文、密钥、密文、加密、解密

什么是明文呢?

没有加密的文字(或者字符串),一般人都能看懂的意思,属于密码学术语。

在通信系统中它可能是比特流,如文本、位图、数字化的语音或者数字化的视频图像等。

什么是密钥呢?

密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。

密钥分为对称密钥与非对称密钥。

什么是密文呢?

加了密的文字,明文是加密之前的文字。

加密这个词有时指密文,但通常用来指加密的方法。对明文施加某种伪装或变换后的输出。

也可理解为不可直接理解的字符或比特集。但可通过算法还原的被打乱的消息,与明文相对。

什么是加密呢?

将明文转换为密文的过程就是加密。

什么是解密呢?

将密文转换为明文的过程就是加密。

ASCII

ASCII (American Standard Code for Information Interchange):美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准 ISO/IEC 646。

ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。

这128个字符分为可显示字符和控制字符。

可显示字符,其编号范围是32-126(0x20-0x7E),共95个字符。

控制字符,其编号范围是0-31和127(0x00-0x1F和0x7F),共33个字符。

26个字符大小写用的就是ASCII编码。

a~z,0x61~0x7a。

A~Z,0x41~0x5a。

chr()和ord()

chr()函数

用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。返回值是当前整数对应的 ASCII 字符。

该函数的返回值为字符串形式。例如,输入:chr(90) ,输出为 ‘Z’ 。

ord()函数

与chr()函数对应,输入ASCII字符表中字符的字符串形式,返回在字符表中的排序位次。

例如,输入:ord(“Z”),输出为 90 。

用chr和ord打印26字母大小写以及其ASCII值

Python实现恺撒密码加密和解密

有了之前的学习,我们可以用Python实现恺撒密码的加密和解密啦!

假设咱们要对26个英文字符(包括大写和小写)进行加密,加密方式凯斯密码,加密密钥是+4,解密密钥是-4。

加密密钥和解密密钥不同,属于非对称加密。

如果相同,属于对称加密。

程序逻辑:先判断字母是小写还是大小,然后以数值形式计算下相对于首字母的偏移量,再加上密钥和首字母数值,最后以字符形式输出。

好了,我们今天就学到这里吧!

如果遇到什么问题,咱们多多交流,共同解决。

我是猫妹,咱们下次见!


http://www.niftyadmin.cn/n/282644.html

相关文章

黑猫带你学eMMC协议第29篇:eMMC设备锁详解(CMD42)

本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,已加入原创侵权保护,禁止私自转载。 文章所在专栏:《黑猫带你学:eMMC协议详解》 1 设备锁简介 通过cmd42命令,可以给emmc设置密码,并且锁定emmc。这时候就不能对emmc的use…

Linux服务器 容器化部署新版Jenkins

安装Docker 先安装yml yum install -y yum-utils device-mapper-persistent-data lvm2设置加速镜像(阿里云镜像) sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装docker yum -y install d…

选择正确的DDoS解决方案:按需云服务

迁移到云端的优势 与部署独立硬件设备相比,迁移到云端有许多优势: 保护基于云的应用程序:托管在云中的应用程序无法通过本地设备保护,因此需要基于云的保护。更大容量:随着容量 DDoS 攻击变得越来越大,许…

Redis消息队列

消息队列(Message Queue),字面意思就是存放消息的队列。最简单的消息队列模型包括3个角色: 消息队列:存储和管理消息,也被称为消息代理(Message Broker) 生产者:发送消…

K8S第三讲 Kubernetes集群配置网络插件

在Kubernetes集群中,网络插件是必需的,因为它们为Pod提供了可访问的IP地址,并确保它们能够相互通信。Kubernetes支持多种网络插件,包括Calico、Flannel、Weave Net等。这里以Calico为例介绍如何配置Kubernetes集群的网络插件。 插…

python cms建站教程:Wagtail建站(二、修改主页与自定义后台管理)

不得不说python的中文cms建站教程实在是太少了,直接用Django/Flask这样的框架从头开始写又实在是有点麻烦,自己摸索着写一点使用Wagtail建站的方法,仅供参考。Wagtail是一款基于Django框架的CMS建站工具,可以为你的网站提供一个比…

( 数组和矩阵) 378. 有序矩阵中第 K 小的元素 ——【Leetcode每日一题】

❓378. 有序矩阵中第 K 小的元素 难度:中等 给你一个 n x n n x n nxn 矩阵 m a t r i x matrix matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。 请注意,它是 排序后 的第 k 小元素,而不是第 …

rac部署前配置互信

配置互信有多种办法,方法之一:使用sshUserSetup.sh快速创建互信 sshUserSetup.sh在GI安装介质解压缩后的oui/prov/resources/scripts目录下。 下面命令在一个节点上执行即可(可以在root用户下执行): cd /u01/app/19.0…