利用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实现从网络下载文件并获得文件大小及类型的方法
Apr 28 Python
Python中查看文件名和文件路径
Mar 31 Python
Python下实现的RSA加密/解密及签名/验证功能示例
Jul 17 Python
python中数据爬虫requests库使用方法详解
Feb 11 Python
Python3实现腾讯云OCR识别
Nov 27 Python
python将控制台输出保存至文件的方法
Jan 07 Python
对Python3中dict.keys()转换成list类型的方法详解
Feb 03 Python
初探利用Python进行图文识别(OCR)
Feb 26 Python
python 实现视频 图像帧提取
Dec 10 Python
简单了解django文件下载方式
Feb 10 Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 Python
Python绘制分类图的方法
Apr 20 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新手上路(十一)
2006/10/09 PHP
PHP7 新特性详细介绍
2016/09/06 PHP
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
jQuery代码优化之基本事件
2011/11/01 Javascript
新发现一个骗链接的方法(js读取cookies)
2012/01/11 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
jQuery:节点(插入,复制,替换,删除)操作
2013/03/04 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
2013/07/05 Javascript
Mac/Windows下如何安装Node.js
2013/11/22 Javascript
jquery的live使用注意事项
2014/02/18 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
AngularJS下对数组的对比分析
2016/08/24 Javascript
livereload工具实现前端可视化开发【推荐】
2016/12/23 Javascript
Vue中正确使用jQuery的方法
2017/10/30 jQuery
JavaScript中toLocaleString()和toString()的区别实例分析
2018/08/14 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
2018/10/07 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
vue实现固定位置显示功能
2019/05/30 Javascript
angular使用md5,CryptoJS des加密的方法
2019/06/03 Javascript
jQuery内容选择器与表单选择器实例分析
2019/06/28 jQuery
python使用递归解决全排列数字示例
2014/02/11 Python
利用Python中的mock库对Python代码进行模拟测试
2015/04/16 Python
Python中pygame安装方法图文详解
2015/11/11 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
使用Python为中秋节绘制一块美味的月饼
2019/09/11 Python
Python编程快速上手——选择性拷贝操作案例分析
2020/02/28 Python
Python同时处理多个异常的方法
2020/07/28 Python
Python中Yield的基本用法
2020/10/18 Python
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
公民授权委托书
2014/10/15 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS