利用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实现字符串连接的三种方法及其效率、适用场景详解
Jan 13 Python
python快速建立超简单的web服务器的实现方法
Feb 17 Python
Python Web程序部署到Ubuntu服务器上的方法
Feb 22 Python
python获取文件路径、文件名、后缀名的实例
Apr 23 Python
python实现飞机大战
Sep 11 Python
对Python定时任务的启动和停止方法详解
Feb 19 Python
基于Python的图像数据增强Data Augmentation解析
Aug 13 Python
python 计算方位角实例(根据两点的坐标计算)
Jan 17 Python
如何完美的建立一个python项目
Oct 09 Python
如何实现一个python函数装饰器(Decorator)
Oct 12 Python
分析Python感知线程状态的解决方案之Event与信号量
Jun 16 Python
Python图像处理库PIL详细使用说明
Apr 06 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
农民C键的运用技巧
2020/03/04 星际争霸
php中过滤非法字符的具体实现
2013/10/29 PHP
10个对初学者非常有用的PHP技巧
2016/04/06 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
关于Blog顶部的滚动导航条代码
2006/09/25 Javascript
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
基于JQuery的模拟苹果桌面Dock效果(稳定版)
2012/10/15 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
浅谈js中调用函数时加不加括号的问题
2016/07/28 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
JavaScript每天必学之基础知识
2016/09/17 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
Vue.js原理分析之observer模块详解
2017/02/17 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
tensorflow 打印内存中的变量方法
2018/07/30 Python
python按时间排序目录下的文件实现方法
2018/10/17 Python
Python实现的批量修改文件后缀名操作示例
2018/12/07 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
美国韩国化妆品和护肤品购物网站:Beautytap
2018/07/29 全球购物
乌克兰电子和家用电器商店:Foxtrot
2019/07/23 全球购物
通用C#笔试题附答案
2016/11/26 面试题
化学学院毕业生自荐信范文
2013/12/17 职场文书
小学生秋游活动方案
2014/02/23 职场文书
质量安全标语
2014/06/07 职场文书
机械设计专业大学生职业生涯规划书范文
2014/09/13 职场文书
民政局离婚协议书范本
2014/10/20 职场文书
群众路线教育实践活动实施方案
2014/10/31 职场文书
灵山大佛导游词
2015/02/04 职场文书
网络安全倡议书(3篇)
2019/09/18 职场文书