利用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中对列表排序实例
Jan 04 Python
Python爬取APP下载链接的实现方法
Sep 30 Python
利用python爬取散文网的文章实例教程
Jun 18 Python
python 使用值来排序一个字典的方法
Nov 16 Python
Python中捕获键盘的方式详解
Mar 28 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
Apr 26 Python
python 缺失值处理的方法(Imputation)
Jul 02 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
Aug 14 Python
python实现ip地址的包含关系判断
Feb 07 Python
python3.7调试的实例方法
Jul 21 Python
详解pandas赋值失败问题解决
Nov 29 Python
上手简单,功能强大的Python爬虫框架——feapder
Apr 27 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
自己做矿石收音机
2021/03/02 无线电
JS类库Bindows1.3中的内存释放方式分析
2007/03/08 Javascript
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
jQuery setTimeout()函数使用方法
2013/04/07 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
常规表格多表头查询示例
2014/02/21 Javascript
jQuery实现动画效果circle实例
2015/08/06 Javascript
jQuery中$(function() {});问题详解
2015/08/10 Javascript
Javascript实现鼠标框选操作  不是点击选取
2016/04/14 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
2016/05/12 Javascript
数据结构中的各种排序方法小结(JS实现)
2016/07/23 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
Javascript 编码约定(编码规范)
2018/03/11 Javascript
详解如何用babel转换es6的class语法
2018/04/03 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
详解Vue依赖收集引发的问题
2019/04/22 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
JS实现简易日历效果
2021/01/25 Javascript
python中import reload __import__的区别详解
2017/10/16 Python
使用 Python 实现微信公众号粉丝迁移流程
2018/01/03 Python
Python之list对应元素求和的方法
2018/06/28 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
详解django自定义中间件处理
2018/11/21 Python
Python绘制并保存指定大小图像的方法
2019/01/10 Python
Python for循环与range函数的使用详解
2019/03/23 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
python 微信好友特征数据分析及可视化
2020/01/07 Python
Python2.x与3​​.x版本有哪些区别
2020/07/09 Python
纽约21世纪百货官网:Century 21
2016/08/27 全球购物
城管综合整治方案
2014/05/01 职场文书
心理健康日活动总结
2014/05/08 职场文书
电子商务专业应届毕业生求职信
2014/06/21 职场文书
群教班子对照检查材料
2014/08/26 职场文书
在职人员跳槽求职信
2015/03/20 职场文书
勤俭节约主题班会
2015/08/13 职场文书