利用python实现凯撒密码加解密功能


Posted in Python onMarch 31, 2020

凯撒密码介绍

凯撒密码是一种非常古老的加密方法,相传当年凯撒大地行军打仗时为了保证自己的命令不被敌军知道,就使用这种特殊的方法进行通信,以确保信息传递的安全。他的原理很简单,说到底就是字母于字母之间的替换。

实验目的

应用Python程序设计语言的相关知识,理解并实现凯撒密码加解密过程。

实验内容

任务1:运行import this, 观察代码运行结果;查看this.py源文件(可以在Python安装目录下的Lib文件夹下找到),分析它的原理。
任务2:实现凯撒密码加解密过程。

实验环境

Python 3.8

实验步骤

在实验的第一部分,观察import this的运行结果,分析原理;

在实验的第二部分,实现凯撒加解密过程。
实验代码及运行结果

1.import this

运行结果

利用python实现凯撒密码加解密功能

原理分析

观察this.py文件:

利用python实现凯撒密码加解密功能

可见,该段代码其实就是一个凯撒解密过程。c取元组中的两个值65和97,分别对应ASCII码中的'A'和'a'。以从65开始的循环为例,i从0到25, 每一次循环,d[chr(i+c)] = chr((i+13) % 26 + c)这句代码都在更新d列表中的键值对。从0开始到12,定义了从'A':'N'、'B':'O'一直到'Z':'M'这样一系列键值对。
由于对26取余,从i=13 开始,这个过程反转了过来,一直到i=25,定义了从'M':'Z'到'N':'A'的键值对。
在 c = 97 的循环中执行同样的操作,得到小写字母a~z的映射。
于是在字典d中形成了52个这样一一对应的键值对。
最后一句print("".join([d.get(c, c) for c in s])),调用get()输入为字典d的键,输出为其对应的值,如果在字典d中没有这样的键值对,例如标点、空格,则返回其本身,最后通过join()形成新的字符串。

2.实现凯撒加解密过程

实验代码

def getMode():
  while 1:
    print('请选择加密或解密模式:')
    print('加密e')
    print('解密d')
    mode = input()
    if mode in "e d".split(' ',1):
      return mode
    else:
      print("请重新输入:")
def getMessage():
  print('请输入要执行的信息:')
  return input()
def getKey():
  print("请输入密钥:")
  key = int(input())
  return key
def encrypt(mode,message,key):
  if mode == 'd':
    key = -key
  d = {}
  for c in (65, 97):
    for i in range(26):
      d[chr(i+c)] = chr((i+key) % 26 + c)
  print("结果为:")
  print("".join([d.get(c, c) for c in message])) #这里套用了this.py文件

mode = getMode()
message = getMessage()
key = getKey()
encrypt(mode,message,key)

运行结果

利用python实现凯撒密码加解密功能

总结

到此这篇关于利用python实现凯撒密码加解密的文章就介绍到这了,更多相关python 凯撒密码加解密内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python常用库推荐
Dec 04 Python
Python实现读取txt文件并画三维图简单代码示例
Dec 09 Python
python在线编译器的简单原理及简单实现代码
Feb 02 Python
Python爬虫框架scrapy实现的文件下载功能示例
Aug 04 Python
python合并已经存在的sheet数据到新sheet的方法
Dec 11 Python
如何在django里上传csv文件并进行入库处理的方法
Jan 02 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
Jun 04 Python
Python学习笔记之函数的定义和作用域实例详解
Aug 13 Python
Django之使用内置函数和celery发邮件的方法示例
Sep 16 Python
Django高并发负载均衡实现原理详解
Apr 04 Python
Python Json数据文件操作原理解析
May 09 Python
python ETL工具 pyetl
Jun 07 Python
python手机号前7位归属地爬虫代码实例
Mar 31 #Python
django修改models重建数据库的操作
Mar 31 #Python
Python写捕鱼达人的游戏实现
Mar 31 #Python
Django 多对多字段的更新和插入数据实例
Mar 31 #Python
基于python爬取有道翻译过程图解
Mar 31 #Python
django实现将修改好的新模型写入数据库
Mar 31 #Python
Python urlencode和unquote函数使用实例解析
Mar 31 #Python
You might like
php更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
php服务器的系统详解
2019/10/12 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
用js+xml自动生成表格的东西
2006/12/21 Javascript
extjs fckeditor集成代码
2009/05/10 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
2013/07/12 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
2013/12/12 Javascript
基于jquery animate操作css样式属性小结
2015/11/27 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
深入理解js generator数据类型
2016/08/16 Javascript
js实现倒计时及时间对象
2016/11/15 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
vue数据传递--我有特殊的实现技巧
2018/03/20 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
2020/06/04 Javascript
介绍Python中的fabs()方法的使用
2015/05/14 Python
Ubuntu下安装PyV8
2016/03/13 Python
Python的Django框架中forms表单类的使用方法详解
2016/06/21 Python
python3 实现验证码图片切割的方法
2018/12/07 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
Python selenium文件上传下载功能代码实例
2020/04/13 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
英国工艺品购物网站:Minerva Crafts
2018/01/29 全球购物
Nike挪威官网:Nike.com (NO)
2018/11/26 全球购物
四年大学生活的个人自我评价
2013/12/11 职场文书
法学专业本科生自荐信范文
2013/12/17 职场文书
项目计划书范文
2014/01/09 职场文书
文秘档案管理岗位职责
2014/03/06 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
2015年全国爱耳日活动总结
2015/02/27 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python
Mongo服务重启异常问题的处理方法
2021/07/01 MongoDB
面试官问我Mysql的存储引擎了解多少
2022/08/05 MySQL