利用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 随机数生成的代码的详细分析
May 15 Python
举例讲解Python中metaclass元类的创建与使用
Jun 30 Python
Python实现Linux中的du命令
Jun 12 Python
基于python内置函数与匿名函数详解
Jan 09 Python
Python 寻找局部最高点的实现
Dec 05 Python
pytorch程序异常后删除占用的显存操作
Jan 13 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
Feb 07 Python
python代码实现TSNE降维数据可视化教程
Feb 28 Python
让Django的BooleanField支持字符串形式的输入方式
May 20 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
Jan 06 Python
总结Python连接CS2000的详细步骤
Jun 23 Python
Python中re模块的元字符使用小结
Apr 07 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
支持php4、php5的mysql数据库操作类
2008/01/10 PHP
加强版phplib的DB类
2008/03/31 PHP
php+ajax注册实时验证功能
2016/07/20 PHP
php导出csv文件,可导出前导0实例代码
2016/11/16 PHP
详解如何实现Laravel的服务容器的方法示例
2019/04/15 PHP
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
2009/05/25 Javascript
Mootools 1.2教程 选项卡效果(Tabs)
2009/09/15 Javascript
IE 上下滚动展示模仿Marquee机制
2009/12/20 Javascript
非主流的textarea自增长实现js代码
2011/12/20 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
jQuery扁平化风格下拉框美化插件FancySelect使用指南
2015/02/10 Javascript
javascript 对象数组根据对象object key的值排序
2015/03/09 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
JS实现的base64加密解密操作示例
2018/04/18 Javascript
微信小程序使用component自定义toast弹窗效果
2018/11/27 Javascript
详解vue移动端项目代码拆分记录
2019/03/15 Javascript
vue 实现模糊检索并根据其他字符的首字母顺序排列
2019/09/19 Javascript
vue获取form表单的值示例
2019/10/29 Javascript
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
python调用自定义函数的实例操作
2019/06/26 Python
简单了解如何封装自己的Python包
2020/07/08 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
2020/10/15 Python
Python实现冒泡排序算法的完整实例
2020/11/04 Python
scrapy-splash简单使用详解
2021/02/21 Python
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
天逸系统(武汉)有限公司Java笔试题
2015/12/29 面试题
UNIX文件系统分类
2014/11/11 面试题
集团公司人力资源部岗位职责
2014/01/03 职场文书
培训演讲稿范文
2014/01/12 职场文书
2015年推普周活动方案
2015/05/06 职场文书
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript
html粘性页脚的具体使用
2022/01/18 HTML / CSS
WIN10使用IIS部署ftp服务器详细教程
2022/08/05 Servers