利用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 yield机制的异步操作同步化编程模型
Mar 18 Python
Python编码类型转换方法详解
Jul 01 Python
Django的信号机制详解
May 05 Python
使用Python对Csv文件操作实例代码
May 12 Python
python正则过滤字母、中文、数字及特殊字符方法详解
Feb 11 Python
Python OpenCV读取显示视频的方法示例
Feb 20 Python
python实现音乐播放器 python实现花框音乐盒子
Feb 25 Python
Python3 hashlib密码散列算法原理详解
Mar 30 Python
python3 配置logging日志类的操作
Apr 08 Python
基于Python脚本实现邮件报警功能
May 20 Python
Python Socket TCP双端聊天功能实现过程详解
Jun 15 Python
matplotlib之多边形选区(PolygonSelector)的使用
Feb 24 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 代码优化的42条建议 推荐
2009/09/25 PHP
PHP开启gzip页面压缩实例代码
2010/03/11 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
2015/12/22 PHP
php单例模式的简单实现方法
2016/06/10 PHP
PHP调试及性能分析工具Xdebug详解
2017/02/09 PHP
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
2010/08/16 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
2016/08/09 Javascript
详解使用nvm安装node.js
2017/07/18 Javascript
layui从数据库中获取复选框的值并默认选中方法
2018/08/15 Javascript
angular将html代码输出为内容的实例
2018/09/30 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
详解python列表生成式和列表生成式器区别
2019/03/27 Python
Python3.5文件读与写操作经典实例详解
2019/05/01 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
2019/05/15 Python
Django用户认证系统 User对象解析
2019/08/02 Python
pygame实现弹球游戏
2020/04/14 Python
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
朗仕(Lab series)英国官网:雅诗兰黛集团男士专属护肤品牌
2017/11/28 全球购物
精灵市场:Pixie Market
2019/06/18 全球购物
什么是数组名
2012/05/10 面试题
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
我的教育故事演讲稿
2014/05/04 职场文书
高中生第一学年自我鉴定2015
2014/09/28 职场文书
党员查摆剖析材料
2014/10/10 职场文书
解放思想大讨论活动总结
2015/05/09 职场文书
同学会感言
2015/07/30 职场文书
2016年学校“3.12”植树节活动总结
2016/03/16 职场文书
python库sklearn常用操作
2021/08/23 Python
Python编程源码报错解决方法总结经验分享
2021/10/05 Python
千万级用户系统SQL调优实战分享
2022/03/03 MySQL