利用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中用于转换字母为小写的lower()方法使用简介
May 19 Python
Python解惑之整数比较详解
Apr 24 Python
Python字符串处理实例详解
May 18 Python
简单易懂的python环境安装教程
Jul 13 Python
Python中super函数的用法
Nov 17 Python
python版本五子棋的实现代码
Dec 11 Python
python实现各种插值法(数值分析)
Jul 30 Python
PyCharm搭建Spark开发环境的实现步骤
Sep 05 Python
PyTorch 普通卷积和空洞卷积实例
Jan 07 Python
jupyter notebook 增加kernel教程
Apr 10 Python
使用keras2.0 将Merge层改为函数式
May 23 Python
python利用appium实现手机APP自动化的示例
Jan 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
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
PHP 中的类
2006/10/09 PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
php设计模式 State (状态模式)
2011/06/26 PHP
PHP基础之运算符的使用方法
2013/04/28 PHP
浅析PHP 按位与或 (^ 、&)
2013/06/21 PHP
跟我学Laravel之配置Laravel
2014/10/15 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
js限制文本框为整数和货币的函数代码
2010/10/13 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
2014/04/20 Javascript
javascript实现省市区三级联动下拉框菜单
2015/11/17 Javascript
js基于setTimeout与setInterval实现多线程
2016/06/17 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
2017/12/05 jQuery
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
2018/01/25 Javascript
微信小程序实现页面分享onShareAppMessage
2019/08/12 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
npm qs模块使用详解
2020/02/07 Javascript
Python基于pygame实现图片代替鼠标移动效果
2015/11/11 Python
通过PHP与Python代码对比的语法差异详解
2019/07/10 Python
Python 处理文件的几种方式
2019/08/23 Python
学习Python列表的基础知识汇总
2020/03/10 Python
pycharm安装及如何导入numpy
2020/04/03 Python
python 用pandas实现数据透视表功能
2020/12/21 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
彻底解决pip下载pytorch慢的问题方法
2021/03/01 Python
几个数据库方面的面试题
2016/07/01 面试题
金属材料工程个人求职的自我评价
2013/12/04 职场文书
美德好少年事迹材料
2014/01/19 职场文书
元旦晚会感言
2014/03/12 职场文书
授权委托书样本
2014/09/25 职场文书
语文教师求职信范文
2015/03/20 职场文书
原告离婚代理词
2015/05/23 职场文书
用python开发一款操作MySQL的小工具
2021/05/12 Python
聊聊Python中关于a=[[]]*3的反思
2021/06/02 Python
详解运行Python的神器Jupyter Notebook
2021/06/03 Python