利用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中使用HTMLParser解析HTML的教程
Apr 29 Python
python学习之编写查询ip程序
Feb 27 Python
关于Python中异常(Exception)的汇总
Jan 18 Python
Django 数据库同步操作技巧详解
Jul 19 Python
pandas和spark dataframe互相转换实例详解
Feb 18 Python
Python导入模块包原理及相关注意事项
Mar 25 Python
解决 jupyter notebook 回车换两行问题
Apr 15 Python
如何通过Python3和ssl实现加密通信功能
May 09 Python
Python爬虫防封ip的一些技巧
Aug 06 Python
Python Pandas list列表数据列拆分成多行的方法实现
Dec 14 Python
Python实现简单的猜单词
Jun 15 Python
python数字类型和占位符详情
Mar 13 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
东方红 - 来复式再生机的修复
2021/03/02 无线电
PHP实现的简单分页类及用法示例
2016/05/06 PHP
php常用的工具开发整理
2019/09/26 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
CCPry JS类库 代码
2009/10/30 Javascript
JavaScript Sort 表格排序
2009/10/31 Javascript
JQuery与JSon实现的无刷新分页代码
2011/09/13 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
jQuery实现延迟跳转的方法
2015/06/05 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
高性能JavaScript循环语句和条件语句
2016/01/20 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
Jquery实现上下移动和排序代码
2016/10/17 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
JS实现简单拖拽效果
2017/06/21 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
详解react-native WebView 返回处理(非回调方法可解决)
2018/02/27 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
详解Python中的正则表达式
2018/07/08 Python
python3.5绘制随机漫步图
2018/08/27 Python
pandas使用apply多列生成一列数据的实例
2018/11/28 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
办护照工作证明范本
2014/01/14 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
教师个人年终总结
2015/02/11 职场文书
2015年青年志愿者工作总结
2015/05/20 职场文书
党支部季度考核意见
2015/06/02 职场文书
感恩老师主题班会
2015/08/12 职场文书
2019中小学生安全过暑期倡议书
2019/06/24 职场文书
python实现高效的遗传算法
2021/04/07 Python
python 自动化偷懒的四个实用操作
2021/04/11 Python
python获取字符串中的email
2022/03/31 Python
R9700摩机记
2022/04/05 无线电