利用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对html代码进行escape编码的方法
May 04 Python
解决Spyder中图片显示太小的问题
Apr 27 Python
对python特殊函数 __call__()的使用详解
Jul 02 Python
使用pycharm在本地开发并实时同步到服务器
Aug 02 Python
使用Fabric自动化部署Django项目的实现
Sep 27 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
Oct 30 Python
tensorflow模型继续训练 fineturn实例
Jan 21 Python
tensorflow 实现数据类型转换
Feb 17 Python
学习Python爬虫的几点建议
Aug 05 Python
提高python代码运行效率的一些建议
Sep 29 Python
Python机器学习实战之k-近邻算法的实现
Nov 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
PHP调用Linux的命令行执行文件压缩命令
2013/01/27 PHP
php数组去重的函数代码
2013/02/03 PHP
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
Yii中render和renderPartial的区别
2014/09/03 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
DHTML Slide Show script图片轮换
2008/03/03 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
JS获取及设置TextArea或input文本框选择文本位置的方法
2015/03/24 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
js贪吃蛇游戏实现思路和源码
2016/04/14 Javascript
JS实现重新加载当前页面或者父页面的几种方法
2016/11/30 Javascript
JS调用Android、Ios原生控件
2017/01/06 Javascript
angular1.x ui-route传参的三种写法小结
2018/08/31 Javascript
vue基于element的区间选择组件
2018/09/07 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
Vuex中的Mutations的具体使用方法
2020/06/01 Javascript
[01:01:18]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#2COL VS LGD
2016/03/03 DOTA
[00:52]DOTA2齐天大圣预告片
2016/08/13 DOTA
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
[55:39]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第二场 1月19日
2021/03/11 DOTA
Python  连接字符串(join %)
2008/09/06 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
在CentOS6上安装Python2.7的解决方法
2018/01/09 Python
python发送邮件脚本
2018/05/22 Python
Dlib+OpenCV深度学习人脸识别的方法示例
2019/05/14 Python
python 标准差计算的实现(std)
2019/07/29 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
Monica Vinader官网:英国轻奢珠宝品牌
2020/02/05 全球购物
车辆转让协议书
2014/04/15 职场文书
大学生求职信例文
2014/06/29 职场文书
2014年综治维稳工作总结
2014/11/17 职场文书
2015年企业团支部工作总结
2015/05/21 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书
详解php中流行的rpc框架
2021/05/29 PHP