密码(一)

导言

上一期,我们认识了著名的凯撒密码,也了解了其加密和解密原理,这一期,我们将利用python编程语言来实现凯撒密码的加密过程和解密过程。加密是指给出一段明文,通过程序返回对应的密文,而解密是指根据密文给出明文的过程。

预备知识

由于加密和解密需要处理编码问题和字符大小比较的问题,这里先介绍一下ASCII码。ASCII是一套将计算机符号转化为二进制数的有效编码方法,二进制又与十进制可通,转化后的数值能够比较大小,进行数学计算,标准ASCII 码使用7 位二进制数来表示所有的大写字母和小写字母,数字0到9、标点符号,以及美式英语中使用的特殊控制字符,常见ASCII码是有大小规则的,一般的

数字要小于字母,,如"9"

大写字母要小于小写字母,"A~Z"

字母A比字母Z要小,并按A到Z顺序递增,如"A"

同个字母的大写字母比小写字母要小32。如"A"="a" -32

python中常见的处理ASCII码的函数有ord()和chr()函数,ord() 函数是以一个字符(长度为1的字符串)作为参数,返回对应的十进制的ASCII 数值,而chr() 函数则是以0 - 256 的一个整数为参数,返回值是当前整数对应的ASCII字符,通过chr()和ord()联合起来使用,就能够灵活的对字符(串)进行转换和相关数学运算。

思路及完整代码

有了之前的编码知识,现在的任务是设计一套程序实现凯撒加密和解密。如果输入是明文,对其进行凯撒加密,如果输入是密文,对其进行凯撒解密,由于加密和解密互为逆过程,这里只讨论凯撒加密,且约定密钥为3。

# -*- coding: utf-8 -*-

"""

Created on Sat Jan  4 14:59:08 2020

project name: Caesar cipher

@author: 帅帅de三叔

"""

PlainText=input("input PlainText:") #输入一段明文

PlainText_list=list(PlainText) #将明文拆成一个一个字符

n=len(PlainText) #计算输入明文总长度

CipherText=[] #用来存放凯撒加密后密文

for i in range(n): #对明文的每个字符循环

if PlainText_list[i]==" ": #如果是空格

CipherText.append(PlainText_list[i]) #追加

elif  ord("A") <= ord(PlainText_list[i]) <= ord("X"): #大写字母

#print(chr((ord(PlainText_list[i])+3))) #测试

CipherText.append(chr((ord(PlainText_list[i])+3)))

elif ord("a") <= ord(PlainText_list[i]) <= ord("x"): #小写字母

#print(chr((ord(PlainText_list[i])+3))) #测试

CipherText.append(chr((ord(PlainText_list[i])+3)))

elif PlainText_list[i] in ["Y","Z"]: #大写末端情况

#print(chr((ord(PlainText_list[i])-23))) #测试

CipherText.append(chr((ord(PlainText_list[i])-23)))

elif PlainText_list[i] in ["y","z"]: #小写末端情况

#print(chr((ord(PlainText_list[i])-23))) #测试

CipherText.append(chr((ord(PlainText_list[i])-23)))

print("".join(CipherText))

代码解析

首先利用input()函数输入一段待加密的明文(字符串),然后利用 list()函数将其拆成一个一个单独的字符,对拆出来的单个字符进行判断分情况讨论进行加密,先判断一般情况,再对位于末端的特殊情况单独考虑,如同数学里面的分段函数,每次加密后的凯撒密码追加到CipherText列表里面去,最后利用join()函数拼接成一个字符串,即为原明文对应的密文,比如,我输入

I love you

返回结果是

L oryh brx

当然你可以赋予更多更深的内涵,我这里仅仅举一个例子罢了,想要发现更多有趣好玩的数学吗?赶紧加入我们吧。

参考文献

1,https://www.cnblogs.com/rick52o/p/7206890.html

2,https://baike.baidu.com/item/ASCII/309296?fr=aladdin

- - -The end- - -

你可能喜欢

密码(一)

第九讲   RSA加密算法(一)

第十讲   RSA加密算法(二)

笛卡尔第十三封情书

月牙的面积

月牙定理(一)

月牙定理(二)

三行科创微信公众号欢迎投稿,提供线索

稿件聚焦数学、逻辑,数学工程,数学文化等领域

一经采用,我们将奉上酬劳

投稿邮箱:sanhang_kc@163.com

商务合作:17521754388

加入三行科创交流群,添加微信:melite01(备注 交流群)

python凯撒密码实验报告_凯撒密码的python实现相关推荐

  1. python链表和树实验报告_数据结构树和森林实验报告

    _ 树和森林应用实验 实验报告 实验目的 ( 1) 掌握树和森林的二叉链表表示方法. (2) 掌握树和二叉树的结构及算法之间的对应关系. (3) 掌握树的两种遍历算法及其应用. 实验运行环境 Visu ...

  2. python名片管理器实验报告_名片管理系统——实验报告.doc

    名片管理系统--实验报告 网上名片管理系统 数据库和表的建立:(在MySQL中创建数据库test,并在test数据库中建立card.user和recycle表格,其中card和recycle具有相同的 ...

  3. python学生成绩管理系统实验报告_【python 学生信息管理系统】

    1. 简述 本文讲述的是用 python 语言写一个简单的学生信息管理系统,系统包含学生信息的增删查改功.同时使用了 mysql5.7.14 来存储数据. 2.准备工作 首先,先搭建好自己的 MySQ ...

  4. python贪吃蛇的实验报告_贪吃蛇游戏课程设计实验报告

    DOC 可编辑修改 -------- 为你整理各种最新最全办公范文 -------- 双击可以删除 爱心 --- 用心 --- 恒心 贪吃蛇游戏课程设计实验报告 辽 宁 科 技 大 学 课程设计说明书 ...

  5. python链表和树实验报告_关于Python实现树结构和链表结构的一点想法

    关于Python实现树结构和链表结构的一点想法 Python由于内置的数据结构具有很高的灵活性,所以可以用很多种方式来构建树.图.链表等结构 1. 树的Python实现 python自然可以使用cla ...

  6. python爬虫实训实验报告_用Pycharm进行scrapy爬虫的实验报告

    1. 实验内容 使用Pycharm写代码,采用scrapy爬取红袖小说网前十页的作品信息. 2. 试验环境 操作系统:window10 家庭版64位操作系统 Python版本:python 3.7.3 ...

  7. python爬虫豆瓣评论实验报告_用python实现豆瓣短评通用爬虫(登录、爬取、可视化分析)...

    原创技术公众号:bigsai 前言 在本人上的一门课中,老师对每个小组有个任务要求,介绍和完成一个小模块.工具知识的使用.然而我所在的组刚好遇到的是python爬虫的小课题. 心想这不是很简单嘛,搞啥 ...

  8. python学生管理系统设计实验报告_学生成绩管理系统实验报告(新鲜出炉)

    C语言课程设计报告 源码下载方式 关注微信公众号 跨时代的jay 回复 学生成绩管理系统 为大家提供一些帮助! 获取链接后复制到浏览器即可下载 课题题目: 学生信息管理系统 班 级: 信卓11801 ...

  9. python爬虫豆瓣评论实验报告_豆瓣爬虫实践-python版

    豆瓣登录,无验证码版: import requests #starturl = "https://www.douban.com/accounts/login" loginurl = ...

  10. python俄罗斯方块小游戏实验报告,童年的记忆——如何用python写一个俄罗斯方块小游戏!...

    谈到记忆里的小游戏,俄罗斯方块是大家一定会想到的一款游戏,自己写出来的应该玩起来更有感觉,然后就写了一个俄罗斯方块的游戏 给大家分享一下这个游戏的源码 先用python创建一个py文件 定义这次程序所 ...

最新文章

  1. Cartographer安装
  2. 节后综合症太痛苦,人工智能有“良方”
  3. 自己动手写CPU之第七阶段(5)——流水线暂停机制的设计与实现
  4. trace与代码跟踪服务
  5. dim private public static_PHP中const,static,public,private,protected的区别
  6. 使用 Docker 搭建 PostgreSQL 12 主从环境
  7. 2019长江课堂作业答案_“绝户网”捕捞长江鳗鱼苗 检察机关:“全链条”担责...
  8. 云计算入门科普系列:基于Docker部署LNMP架构
  9. python3 介绍
  10. Qcom平台添加 Camera 驱动(msm8953)
  11. 国内顶尖团队的开源地址
  12. Win11桌面切换快捷键是什么?Win11快速切换桌面的方法
  13. 网页中那些遇到过的导航选中状态actived selected
  14. “爱心助农”成绩单公布,淘宝何以成为最大舞台?
  15. 【智能家居】空调遥控器破解
  16. 18907 雪花雪花雪花
  17. 如何把苹果卖出高价?
  18. java获取excel嵌入对象_EXCEL,使用嵌入对象(.dot)作为报告模板
  19. EAS报表开发----收付明细
  20. 6、Linux多进程开发

热门文章

  1. 最新bilibili怎么下载视频
  2. 仿真BPSK调制在AWGN信道下分别使用卷积码和未使用卷积码的性能对比,其中,卷积码的约束长度为7,生成多项式为[171,133],码率为1/2,译码分别采用硬判决译码和软判决译码
  3. 2021年春季 PAT乙级(复盘)
  4. WPF 自定义各类按钮样式
  5. 在MFC程序中使用XML文件配置工具栏
  6. 中南OJ 2012年8月月赛 I题 Imagination
  7. Uncaught DOMException: Blocked a frame with origin null from accessing a cross-origin frame.
  8. CAD2016下载AutoCAD2016下载安装详细教程CAD下载
  9. 数据仓库经典销售案例
  10. python均值方差模型_马科维茨的均值一方差组合模型