利用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创建文件和追加文件内容实例
Oct 21 Python
python制作爬虫并将抓取结果保存到excel中
Apr 06 Python
python3 shelve模块的详解
Jul 08 Python
python 中if else 语句的作用及示例代码
Mar 05 Python
Python 将pdf转成图片的方法
Apr 23 Python
python smtplib模块自动收发邮件功能(一)
May 22 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
Feb 20 Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 Python
浅析Python与Mongodb数据库之间的操作方法
Jul 01 Python
python logging模块的使用总结
Jul 09 Python
python隐藏类中属性的3种实现方法
Dec 19 Python
django 将自带的数据库sqlite3改成mysql实例
Jul 09 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
Terran建筑一览
2020/03/14 星际争霸
php的控制语句
2006/10/09 PHP
防止MySQL注入或HTML表单滥用的PHP程序
2009/01/21 PHP
php class中public,private,protected的区别以及实例分析
2013/06/18 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
php JWT在web端中的使用方法教程
2018/09/06 PHP
跟我学习javascript的prototype,getPrototypeOf和__proto__
2015/11/17 Javascript
基于html5和nodejs相结合实现websocket即使通讯
2015/11/19 NodeJs
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
AngularJS点击添加样式、点击变色设置的实例代码
2017/07/27 Javascript
JavaScript适配器模式详解
2017/10/19 Javascript
jQuery实现右侧抽屉式在线客服功能
2017/12/25 jQuery
ExtJs使用自定义插件动态保存表头配置(隐藏或显示)
2018/09/25 Javascript
vue中v-for循环给标签属性赋值的方法
2018/10/18 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
python 数据清洗之数据合并、转换、过滤、排序
2017/02/12 Python
python Tcp协议发送和接收信息的例子
2019/07/22 Python
解决python彩色螺旋线绘制引发的问题
2019/11/23 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
python支持多线程的爬虫实例
2019/12/21 Python
python将图片转base64,实现前端显示
2020/01/09 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
python中用ctypes模拟点击的实例讲解
2020/11/26 Python
CSS3 文字动画效果
2020/11/12 HTML / CSS
Bugatchi官方网站:男士服装在线
2019/04/10 全球购物
手工制作的音乐盒:Music Box Attic
2019/09/05 全球购物
自我评价是什么
2014/01/04 职场文书
一份婚庆公司创业计划书
2014/01/11 职场文书
自动化专业大学生职业生涯规划范文:爱拚才会赢
2014/09/12 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
2015年财务工作总结范文
2015/03/31 职场文书
js实现自动锁屏功能
2021/06/02 Javascript