利用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生成式的send()方法(详解)
May 08 Python
python实现自主查询实时天气
Jun 22 Python
django-rest-framework 自定义swagger过程详解
Jul 18 Python
django将数组传递给前台模板的方法
Aug 06 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
Oct 17 Python
Python模拟登录之滑块验证码的破解(实例代码)
Nov 18 Python
如何卸载python插件
Jul 08 Python
python与c语言的语法有哪些不一样的
Sep 13 Python
python 读取、写入txt文件的示例
Sep 27 Python
基于python的matplotlib制作双Y轴图
Apr 20 Python
Python使用UDP实现720p视频传输的操作
Apr 24 Python
Python docx库删除复制paragraph及行高设置图片插入示例
Jul 23 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
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
PHP安全防范技巧分享
2011/11/03 PHP
PHP数组及条件,循环语句学习
2012/11/11 PHP
PHP中的浅复制与深复制的实例详解
2017/10/26 PHP
Jquery 学习笔记(一)
2009/10/13 Javascript
初窥JQuery(二)事件机制(2)
2010/12/06 Javascript
JS 两日期相减,获得天数的小例子(兼容IE,FF)
2013/07/01 Javascript
javascript实现TreeView 无刷新展开的实例代码
2013/07/13 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
2015/10/25 Javascript
基于JS实现Android,iOS一个手势动画效果
2016/04/27 Javascript
JS组件Bootstrap导航条使用方法详解
2016/04/29 Javascript
AngularJs 指令详解及示例代码
2016/09/01 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
2016/09/05 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
js学习之----深入理解闭包
2016/11/21 Javascript
javascript 判断一个对象为数组的方法
2017/05/03 Javascript
详解JavaScript按概率随机生成事件
2017/08/02 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
Layer+Echarts构建弹出层折线图的方法
2019/09/25 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
vue实现简单加法计算器
2020/10/22 Javascript
对pytorch网络层结构的数组化详解
2018/12/08 Python
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
浅谈python图片处理Image和skimage的区别
2019/08/04 Python
Python高级特性——详解多维数组切片(Slice)
2019/11/26 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
css3 旋转按钮 使用CSS3创建一个旋转可变色按钮
2012/12/31 HTML / CSS
HTML5在canvas中绘制复杂形状附效果截图
2014/06/23 HTML / CSS
写自荐信有哪些不宜?
2013/10/17 职场文书
综合实践活动方案
2014/02/14 职场文书
社区工作者感言
2014/03/02 职场文书
模具专业毕业推荐信
2014/03/08 职场文书
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
利用Matlab绘制各类特殊图形的实例代码
2021/07/16 Python
zabbix如何添加监控主机和自定义监控项
2022/08/14 Servers