利用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中replace方法实例分析
Aug 20 Python
编写Python脚本抓取网络小说来制作自己的阅读器
Aug 20 Python
Python实现随机生成有效手机号码及身份证功能示例
Jun 05 Python
如何高效使用Python字典的方法详解
Aug 31 Python
python 信息同时输出到控制台与文件的实例讲解
May 11 Python
python实现五子棋小游戏
Mar 25 Python
Python基于scipy实现信号滤波功能
May 08 Python
用Python实现校园通知更新提醒功能
Nov 23 Python
Python模块/包/库安装的六种方法及区别
Feb 24 Python
Django实现将views.py中的数据传递到前端html页面,并展示
Mar 16 Python
Python数据正态性检验实现过程
Apr 18 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
Oct 27 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 中include()与require()的对比
2006/10/09 PHP
PHP 全角转半角实现代码
2010/05/16 PHP
PHP读取PPT文件的方法
2015/12/10 PHP
Zend Framework动作助手Redirector用法实例详解
2016/03/05 PHP
thinkPHP批量删除的实现方法分析
2016/11/09 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
jquery 设置元素相对于另一个元素的top值(实例代码)
2013/11/06 Javascript
jquery中的过滤操作详细解析
2013/12/02 Javascript
JQuery基础语法小结
2015/02/27 Javascript
JavaScript操作HTML元素和样式的方法详解
2015/10/21 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
JS闭包的几种常见形式实例详解
2017/09/16 Javascript
[02:55]含熏伴清风,风行者至宝、屠夫身心及典藏宝瓶二展示
2020/09/08 DOTA
python实现忽略大小写对字符串列表排序的方法
2014/09/25 Python
python获取本机mac地址和ip地址的方法
2015/04/29 Python
轻松掌握python设计模式之访问者模式
2016/11/18 Python
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
python利用rsa库做公钥解密的方法教程
2017/12/10 Python
python+mysql实现教务管理系统
2019/02/20 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
2019/07/04 Python
python多进程并发demo实例解析
2019/12/13 Python
python新式类和经典类的区别实例分析
2020/03/23 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
Nike香港官网:Nike HK
2019/03/23 全球购物
学校2014重阳节活动策划方案
2014/09/16 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
出国签证在职证明范本
2014/11/24 职场文书
避暑山庄导游词
2015/02/04 职场文书
确保工程质量承诺书
2015/04/29 职场文书
使用JS前端技术实现静态图片局部流动效果
2022/08/05 Javascript