利用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 字符串中的字符倒转
Sep 06 Python
Python常用时间操作总结【取得当前时间、时间函数、应用等】
May 11 Python
详解Python3中的迭代器和生成器及其区别
Oct 09 Python
PyGame贪吃蛇的实现代码示例
Nov 21 Python
详解Python 切片语法
Jun 10 Python
python内存动态分配过程详解
Jul 15 Python
利用python实现AR教程
Nov 20 Python
Python3 hashlib密码散列算法原理详解
Mar 30 Python
Jupyter Notebook打开任意文件夹操作
Apr 14 Python
利用django创建一个简易的博客网站的示例
Sep 29 Python
通用的Django注册功能模块实现方法
Feb 05 Python
 分享一个Python 遇到数据库超好用的模块
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
2020年4月放送!《Princess Connect Re:Dive》制作组 & 角色声优公开!
2020/03/06 日漫
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
JSONP 跨域共享信息
2012/08/16 Javascript
JavaScript判断IE版本型号
2015/07/27 Javascript
基于jQuery实现鼠标点击导航菜单水波动画效果附源码下载
2016/01/06 Javascript
微信支付 JS API支付接口详解
2016/07/11 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
jQuery设计思想
2017/03/07 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
微信小程序左滑删除功能开发案例详解
2018/11/12 Javascript
node(koa2) web应用模块介绍详解
2019/03/29 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
[03:14]辉夜杯主赛事 12月25日每日之星
2015/12/26 DOTA
详解Python中的各种函数的使用
2015/05/24 Python
Python的条件语句与运算符优先级详解
2015/10/13 Python
详解python3实现的web端json通信协议
2016/12/29 Python
python分治法求二维数组局部峰值方法
2018/04/03 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
Python3模拟登录操作实例分析
2019/03/12 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
python 下载m3u8视频的示例代码
2020/11/11 Python
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
密封类可以有虚函数吗
2014/08/11 面试题
团队精神演讲稿
2013/12/31 职场文书
白血病募捐倡议书
2014/05/14 职场文书
会计求职信
2014/05/29 职场文书
服装设计专业求职信
2014/06/16 职场文书
大学生创业计划书
2014/08/14 职场文书
大三学生学年自我鉴定
2014/09/12 职场文书
招商引资工作汇报
2014/10/28 职场文书
原料仓管员岗位职责
2015/04/01 职场文书
如何书写民事调解协议书?
2019/06/25 职场文书
Python使用scapy模块发包收包
2021/05/07 Python