利用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 urllib模块urlopen()与urlretrieve()详解
Nov 01 Python
python编写爬虫小程序
May 14 Python
Python批量创建迅雷任务及创建多个文件
Feb 13 Python
python爬虫中get和post方法介绍以及cookie作用
Feb 08 Python
Python中一些不为人知的基础技巧总结
May 19 Python
Flask框架实现给视图函数增加装饰器操作示例
Jul 16 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
python写入数据到csv或xlsx文件的3种方法
Aug 23 Python
python之array赋值技巧分享
Nov 28 Python
Python实现计算长方形面积(带参数函数demo)
Jan 18 Python
TensorFlow实现保存训练模型为pd文件并恢复
Feb 06 Python
用OpenCV进行年龄和性别检测的实现示例
Jan 29 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 ajax 分页类代码
2008/11/13 PHP
PHP文件打开、关闭、写入的判断与执行代码
2011/05/24 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
2014/08/11 PHP
ThinkPHP中自定义目录结构的设置方法
2014/08/15 PHP
php Session无效分析资料整理
2016/11/29 PHP
php+redis实现多台服务器内网存储session并读取示例
2017/01/12 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
Jquery 组合form元素为json格式,asp.net反序列化
2009/07/09 Javascript
jquery 模板的应用示例
2013/11/12 Javascript
js常用自定义公共函数汇总
2014/01/15 Javascript
js处理php输出时间戳对不上号的解决方法
2014/06/20 Javascript
javascript实现单击和双击并存的方法
2014/12/13 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
Python 描述符(Descriptor)入门
2016/11/20 Python
python基于ID3思想的决策树
2018/01/03 Python
Python OpenCV实现图片上输出中文
2018/01/22 Python
python使用生成器实现可迭代对象
2018/03/20 Python
利用anaconda保证64位和32位的python共存
2021/03/09 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
2019/10/28 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
使用Keras构造简单的CNN网络实例
2020/06/29 Python
解决keras模型保存h5文件提示无此目录问题
2020/07/01 Python
Ralph Lauren拉夫·劳伦美国官网:带有浓郁美国气息的高品味时装品牌
2017/11/01 全球购物
总经理助理的八要求
2013/11/12 职场文书
运动会演讲稿
2014/05/07 职场文书
合同意向书范本
2014/07/30 职场文书
小学生关于梦想的演讲稿
2014/08/22 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
师德师风自查材料
2014/10/14 职场文书
2015年度高中教师工作总结
2015/05/26 职场文书
2016年大学生寒假社会实践心得体会
2015/10/09 职场文书
opencv用VS2013调试时用Image Watch插件查看图片
2021/07/26 Python