【算法练习】24:凯撒密码

news2024/11/25 8:17:55

一、凯撒密码介绍:

采用替换的方式对英文字母进行处理,将每一个英文字符循环替换为字母表序列中该字符的后面的第三个字符,即循环右移3位。

明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ

密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC

若设偏移量位n,可以得出加解密公式:

 二、算法实现

1、简单版本(只实现了小写英文字符串的加密)

def encrypt(s):
    ciphertext = ''
    for i in s:
        i = chr(ord('a')+(ord(i) - ord('a') + 3) % 26)
        ciphertext += i
    return ciphertext


def decrypt(s):
    message = ''
    for i in s:
        i = chr(ord('a')+(ord(i) - ord('a') - 3) % 26)
        message += i
    return message

if __name__ == '__main__':
    s = input('请输入一串小写字母组成的字符串:')
    print(f'将{s}加密后的密文 =',  encrypt(s))
    print(f'将{s}解密后的明文 =' , decrypt(s))

2、升级版本(实现中文和英文的加密)

def encrypt(s):
    ciphertext = ''
    for i in s:

        if 'a' <= i <= 'z':
            # 判断小写字母
            i = chr(ord('a') + (ord(i) - ord('a') + 3) % 26)
        elif 'A' <= i <= 'Z':
            # 判断大写字母
            i = chr(ord('A') + (ord(i) - ord('A') + 3) % 26)
        elif 0x4E00 <= ord(i) <= 0x9FA5:
            # 判断中文字符
            i = chr(ord(i) + 3)
        else:
            # 其他字符不做加密
            pass
        
        # 生成密文
        ciphertext += i

    return ciphertext


def decrypt(s):
    message = ''

    for i in s:

        if 'a' <= i <= 'z':
            # 判断小写字母
            i = chr(ord('a') + (ord(i) - ord('a') - 3) % 26)
        elif 'A' <= i <= 'Z':
            # 判断大写字母
            i = chr(ord('A') + (ord(i) - ord('A') - 3) % 26)
        elif 0x4E00 <= ord(i) <= 0x9FA5:
            # 判断中文字符
            i = chr(ord(i) - 3)
        else:
            # 其他字符不做加密
            pass
        
        # 生成密文
        message += i

    return message

if __name__ == '__main__':
    s = input('请输入一串小写字母组成的字符串:')
    print(f'将"{s}"加密后的密文 =',  encrypt(s))
    print(f'将"{s}"解密后的明文 =' , decrypt(s))

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

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

相关文章

微信小程序如何读取本地云存储txt数据,避免乱码

第一步 找到你的txt文件&#xff0c;重命名为json文件 第二步 上传到云存储中&#xff0c;获取File ID 第三步 编写js代码 相关技术文档&#xff1a; https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readFile.html onShow(){wx.cloud.d…

《Redis 核心技术与实战》课程学习笔记(三)

高性能 IO 模型&#xff1a;为什么单线程 Redis 能那么快&#xff1f; Redis 是单线程&#xff0c;主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的&#xff0c;这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能&#xff0c;比如持久化、异步删…

CDS Core Data Services S4 CDS view--2

7.2 怎么加注释 首先要看懂注释&#xff0c;comparefilter 一般都是true,这样在association 里的join只被验证一次&#xff0c;如果是FALSE就会不停的被验证。 preservekey, 验证和数据库表的key是否一致。 authorizationcheck, 需要验证权限。不过我们没有设access control…

STM32F1 GPIO 简介

GPIO 是控制或者采集外部器件的信息的外设&#xff0c;即负责输入输出。它按组分配&#xff0c;每组 16 个 IO 口&#xff0c;组数视芯片而定。STM32F103ZET6 芯片是 144 脚的芯片&#xff0c;具有 GPIOA、GPIOB、GPIOC、 GPIOD、GPIOE、GPIOF 和 GPIOG 七组 GPIO 口&#xff0…

13---罗马数字转整数

罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如&#xf…

【DBA课程-笔记】MongoDB入门到云上开发

课程目的&#xff1a;成为专业MongoDB的DBA nosql第一&#xff1a;MongoDB 一、讲师&#xff1a; 二、课程目录 第1章&#xff1a;MongoDB数据库入门 第2章&#xff1a;MongoDB数据数据查询与分析 第3章&#xff1a;MongoDB数据库核心知识 第4章&#xff1a;MongoDB数据库管…

时间序列预测 | Matlab基于粒子群算法优化门控循环单元(PSO-GRU)的时间序列预测,PSO-GRU时间序列预测,单列数据集

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列预测 | Matlab基于粒子群算法优化门控循环单元(PSO-GRU)的时间序列预测,PSO-GRU时间序列预测,单列数据集。 优化参数为学习率,隐藏层节点个数,正则化参数,要求2020b及以上版本&#

Redhat7.6安装mysql5.7

环境准备&#xff1a;硬盘剩余空间最少8G,内存剩余最少2G Mysql官网下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/5.7.html 在Mysql官网下载列表中选择需要安装的版本: RedHat7.6安装MySQL5.7 安装之前&#xff0c;先要保证系统环境是干净的&#xff0c;不能存…

Dual In-Line Package(双列直插式封装)和Pin Grid Array Package(针栅阵列插入式封装)

DIP封装示意图 1.Dual In-Line Package&#xff08;双列直插式封装&#xff09; DIP的详细介绍&#xff1a; 1.封装形式&#xff1a;DIP是一种插件式封装&#xff0c;它由一个狭长的塑料或陶瓷封装体组成&#xff0c;具有在两侧排列的引脚。引脚通常是分布均匀的&#xff0c…

17. 订单金额趋势分析

文章目录 题目需求思路一实现一实现二&#xff1a;使用 over(range)学习链接题目来源 题目需求 查询截止每天的最近3天内的订单金额总和以及订单金额日平均值&#xff0c;保留两位小数&#xff0c;四舍五入。 最近三天 的业务逻辑通常是基于当天往前推2天 期望结果如下&#x…

Kepware.KEPServer安装

1.1 Kepware.KEPServer安装 1.1.1 解压并安装 首先解压并安装KEPServerEX v4.500.465.zip,右键点击KEPServer执行文件进行安装,如图2-2-14所示, 图2-2-14 2) 运行KEPServer安装文件之后出现如图2-2-15所示:点击Next继续。 图2-2-15 3) 选择I accept the tems of the lice…

Keras-5-深度学习用于文本和序列-处理文本数据

深度学习用于文本和序列 说明: 本篇学习记录为&#xff1a;《Python 深度学习》第6章第1节&#xff08;处理文本数据&#xff09; 知识点: 深度学习处理文本或序列数据的基本方法是&#xff1a;循环神经网络 (recurrent neural network) 和 一维卷积神经网络 (1D convert)&…

Python中怎样用索引和切片取出字符串片段?

Python 语言为字符串中的元素编号&#xff0c;以实现对字符串中的单个字符或字符片段的索引。按照不同的方向&#xff0c;索引分为正向索引和逆向索引。假设字符串的长度为L&#xff0c;正向索引中字符串的字符编号从左至右由0递增为L-1&#xff0c;逆向索引中字符串的字符编号…

【雕爷学编程】Arduino动手做(151)---S12SD紫外线模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

022、数据库管理之数据迁移工具(DM)

DM Data Migration架构与原理适用场景下载安装组件编辑初始化配置文件执行部署命令查看DM集群检查DM集群情况启动集群 DM配置概览上游数据库(数据源)配置任务配置过滤配置分库分表合并迁移性能优化常见问题 dmctl检查与启动任务暂停任务恢复任务查询任务停止任务 实验部署DM集群…

Netty--聊天业务

:::info 提醒 : 本文相对比较乱, 主要是关于 Netty websocket 之类的聊天功能相关, 大家了解即可;有兴趣的 可以选读; 1.聊天模块细分微服务: 用户服务&#xff1a;处理用户身份验证、授权和管理。包括用户注册、登录、个人信息管理等功能。聊天服务&#xff1a;处理实时聊天功…

在markdown中或者CSDN中如何展示双下滑线

最近在CSDN中写文章时&#xff0c;遇到了一个问题&#xff0c;当我输入__proto__ 时&#xff0c;在展示的时候&#xff0c;下滑想不显示emm… 于是乎我一通翻找&#xff0c;发现原来不止csdn&#xff0c;markdown里也有这样的问题&#xff0c;并最终找到了解决办法&#xff01…

生成模型一文认识图像生成

最近看了一些图像生成的论文和博客&#xff0c;觉得要总结一下。本文主要介绍图像生成技术&#xff0c;包括研究背景、研究意义、相关应用、以及所用到的技术。 目录 一、背景与意义 二、图像生成应用 2.1 图像到图像的转换 2.2 文本到图像的生成 2.3 图像超分辨率 2.4 风…

转转闲鱼交易猫源码搭建

后台一键生成链接&#xff0c;后台管理 教程&#xff1a;解压源码&#xff0c;修改数据库config/Congig 不会可以看源码里有教程 下载程序&#xff1a;https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

深脑接口 | 清华大学李路明团队NSR综述

更多脑机接口前沿技术&#xff0c;关注公众号&#xff1a;脑机接口社区 如何让机器与人类的大脑深处实现交互&#xff1f;清华大学李路明教授研究团队在《国家科学评论》&#xff08;National Science Review, NSR&#xff09;发表综述文章&#xff0c;介绍深脑接口&#xff0…