利用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模块顶层运行的代码引起的一个Bug
Jul 04 Python
Python接收Gmail新邮件并发送到gtalk的方法
Mar 10 Python
详解Python中DOM方法的动态性
Apr 11 Python
用Python给文本创立向量空间模型的教程
Apr 23 Python
Python复制文件操作实例详解
Nov 10 Python
Python学习之用pygal画世界地图实例
Dec 07 Python
python try except 捕获所有异常的实例
Oct 18 Python
解决python3运行selenium下HTMLTestRunner报错的问题
Dec 27 Python
python用for循环求和的方法总结
Jul 08 Python
Python语言异常处理测试过程解析
Jan 08 Python
信号生成及DFT的python实现方式
Feb 25 Python
Python实现照片卡通化
Dec 06 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检测useragent版本示例
2014/03/24 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
2019/05/29 PHP
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
2010/03/16 Javascript
Jquery Uploadify上传带进度条的简单实例
2014/02/12 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
基于jquery实现select选择框内容左右移动添加删除代码分享
2015/08/25 Javascript
基于JavaScript短信验证码如何实现
2016/01/24 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
详解js的六大数据类型
2016/12/27 Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
2017/04/13 Javascript
Vue实现选择城市功能
2017/05/27 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
微信小程序实现富文本图片宽度自适应的方法
2019/01/20 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
python学生信息管理系统
2018/03/13 Python
Python使用random.shuffle()打乱列表顺序的方法
2018/11/08 Python
selenium在执行phantomjs的API并获取执行结果的方法
2018/12/17 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
对python中的装包与解包实例详解
2019/08/24 Python
git查看、创建、删除、本地、远程分支方法详解
2020/02/18 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
最新远光软件笔试题面试题内容
2013/11/08 面试题
介绍下Lucene建立索引的过程
2016/03/02 面试题
代码中finally中的代码会不会执行
2012/02/06 面试题
保险专业大学生职业规划书
2014/03/03 职场文书
护士节策划方案
2014/05/19 职场文书
党员领导干部承诺书
2014/05/28 职场文书
酒店爱岗敬业演讲稿
2014/09/02 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
归途列车观后感
2015/06/17 职场文书
解决python存数据库速度太慢的问题
2021/04/23 Python