利用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 22 Python
PyQt5每天必学之工具提示功能
Apr 19 Python
PyQt5每天必学之切换按钮
Aug 20 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
Sep 04 Python
Python数据处理篇之Sympy系列(五)---解方程
Oct 12 Python
python模块导入的方法
Oct 24 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
Oct 25 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 Python
pytorch方法测试详解——归一化(BatchNorm2d)
Jan 15 Python
Python实现代码块儿折叠
Apr 15 Python
matplotlib 画双轴子图无法显示x轴的解决方法
Jul 27 Python
python numpy中multiply与*及matul 的区别说明
May 26 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
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
php发送邮件的问题详解
2015/06/22 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
IE/FireFox具备兼容性的拖动代码
2007/08/13 Javascript
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
根据邮箱的域名跳转到相应的登录页面的代码
2012/02/27 Javascript
移动节点的jquery代码
2014/01/13 Javascript
jquery中get,post和ajax方法的使用小结
2014/02/04 Javascript
JS检测输入字符是否包含非法字符的示例代码
2014/02/11 Javascript
jquery实现数字输入框
2017/02/22 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
Node.js 8 中的重要新特性
2017/06/28 Javascript
使用vue实现grid-layout功能实例代码
2018/01/05 Javascript
浅谈Webpack 持久化缓存实践
2018/03/22 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
微信小程序 云开发模糊查询实现解析
2019/09/02 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
python 中xpath爬虫实例详解
2019/08/26 Python
Python常用模块sys,os,time,random功能与用法实例分析
2020/01/07 Python
Tensorflow之MNIST CNN实现并保存、加载模型
2020/06/17 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
python 多线程死锁问题的解决方案
2020/08/25 Python
python中的测试框架
2020/11/13 Python
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
2013/11/29 面试题
技术学校毕业生求职信分享
2013/12/02 职场文书
竞聘副主任科员演讲稿
2014/01/11 职场文书
中医临床专业自我鉴定范文
2014/01/15 职场文书
2014最新实习证明模板
2014/10/02 职场文书
检讨书怎么写?
2019/06/21 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP