在密码学中,凯撒密码(或称恺撒加密、恺撒变换、变换加密)是一种最简单且最广为人知的加密技术。它是一种替换加密的技术。这个加密方法是以恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。恺撒密码通常被作为其他更复杂的加密方法中的一个步骤,例如维吉尼亚密码。恺撒密码还在现代的ROT13系统中被应用。但是和所有的利用字母表进行替换的加密技术一样,恺撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。

尽管是最简单的加密技术,但那该怎么在python中如何现实呢?

代码如下:

def ask():
 while True:
  print("Welcome to you coming!")
  print("you can choose mode : encrypt(e) or decrypt(d)")  #有解密和加密模式
  print("If you choose encrypt ,you can lock the message!") #加密提示
  print("If you choose decrypt ,you can unlock the message!") #解密提示
  print("If you wanna exit , input 'q'!!")     #退出提示
  mode = input("choose:").lower()        #将输入的模式进行变换(从大写变小写,小写部分不变)
  if mode in 'encrypt e decrypt d q'.split():     #当模式是被要求的encrypt e(加密模式)decrypt d(解密模式) q(退出)时进行下一步操作
   #print(mode)           #打印输入的模式
   return mode            #将mode的值作为返回值
  else:
   print('Please input right option!!')     #输出提示


def getKey(mode):
 key = 0               #设置默认的key
 while key <= 0 or key >= 26:         #限制key的范围在(1-25以内的数)
  try:              #这里进行异常处理,将非整数类型的输入进行错误提示打印
   key = int(input("Please input your key:(1-26)"))
  except:
   print("Please input correct number!!")
 #对解密的密匙进行变换
 if mode == 'd' or mode == 'decrypt':
  key = -key
 return key

def getMessage(key):
 #输入信息
 while True:
  informetion = input("Please input message!!")    #输入要解密或者加密的信息
  if informetion.isalpha():         #判断输入的字符串是否为纯字母
   break
  else:
   print("Please input continuous character!!!")   #输错提示
 message = ''             #设置输出的初始值
 for x in informetion:           #将输入信息里的进行逐一字母加密/解密
  num = ord(x)            #将单一字符通过ascii表进行转换,将字母转换为数字
  num += key             #加上key的值进行下列运算
  if x.isupper():            #判断是否是大写字母
   if num > ord('Z'):          #对超出ascii对应数值的范围进行处理
    num -=26
    print(message)
   elif num < ord('A'):
    num +=26
    print(message)
  elif x.islower():           #判断是否小写字母
   if num > ord('z'):
    num -=26
   elif num < ord('a'):
    num +=26
  message += chr(num)           #将单一字符通过ascii表进行转换,将数字转换为字母
 return message             #返回message的值
  
if __name__=="__main__":           #主程序
 mode = ask()             #将ask()返回值存于mode变量中
 if mode == 'q':             #进行退出判断
  print('welcome!!')
 else:
  key = getKey(mode)            #将mode变量的值带入getKey函数中运行,运行后将key的值存入到key变量中
  last = getMessage(key)          #将key变量的值带入到getMessage函数中,运行后将message的值存入到last变量中
  print(last) 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持程序员的世界。

python实现凯撒密码的更多相关文章

  1. 史上最详细的Python打包成exe文件教程

    打包成exe文件可以让python代码在没有python环境的条件下,依然能够运行,实在是码农们写追女朋友表白、情人节浪漫的必需品!1、使用豆瓣镜像源下载: pyinstaller有需要了解如何使用国内镜像的小伙伴可以滴滴到此:国内镜像源详细使用教程!https://blog.csdn.net/xt......

  2. Python3利用scapy局域网实现自动多线程arp扫描功能

    一、所需Python库from scapy.all import *import threading二、实现ip扫描1.获取c段ip地址在ARP()里面有ip地址,我们可以从里面提取出前3段出来ARP().show()然后通过从后查找最后一个.得到最后一段位数,然后总长度-最后一段长度就能取出前3段......

  3. python实现socket简单通信的示例代码

    首先先来简单介绍下socket:(具体更详细介绍的可以在网上找找,都讲得非常详细),这里主要是我自己的一些理解。socket是在应用层与传输层之间的一个抽象层,它的本质是编程接口,通过socket,才能实现TCP/IP协议。它就是一个底层套件,用来处理最底层消息的接受和发送。socket翻译为套接字......

  4. python读取pdf格式文档

    python读取pdf文档一、 准备工作安装对应的库pip install pdfminer3kpip install pdfminer.six 二、部分变量的含义PDFDocument(pdf文档对象)PDFPageInterpreter(解释器)PDFParser(pdf文档分析器)PDFRes......

  5. python调用gdal.warp函数进行正射校正出错分析

    近期,本人在根据某些使用python调用gdal.Warp函数对影像进行RPC校正的教程对遥感影像进行了RPC校正实验,发现有些时候python调用gdal的RPC结果与envi等专业软件的RPC结果相差了很多像素。经调式gdal.py发现,问题在于gdal.Warp函数的transformerOp......

  6. python随机漫步

    随机漫步这次我们将使用python生成随机漫步数据,然后用matplotlib的方式将这些数据呈现出来。随机漫步每次行走都完全是随机的,没有明确的方向,结果是由一系列随机决策决定的。你可以这样认为,随机漫步就是蚂蚁在晕头转向的情况下,每次都沿随机的方向所经过的路径。创建RandomWalk()类为了......

  7. python自动统计zabbix系统监控覆盖率

    脚本主要功能: 1)通过zabbix api接口采集所有监控主机ip地址; 2)通过cmdb系统(蓝鲸)接口采集所有生产主机IP地址、主机名、操作系统、电源状态; 3)以上2步返回数据对比,找出未监控主机ip地址,生......

  8. Python用requests库爬取返回为空的解决办法

    首先介?一下我??用360搜索派取城市排名前20。我们爬取的网址:https://baike.so.com/doc/24368318-25185095.html我们要爬取的内容:html字段:robots协议:现在我们开始用python IDLE 爬取import requestsr = reque......

  9. Python+Django+Eclipse 在Windows下快速开发自己的网站

    一、配置开发环境我的开发环境是:Python3.3.2 + Django1.5.2 + Eclipse1、安装Python下载地址:http://www.python.org/getit/安装完成后为了方便可以配置下环境变量:2、安装Django—Python下用于开发网站的比较流行的web框架下载......

  10. 如何利用python实现图片批处理

    前言在训练神经网络之前,我们往往需要对数据集进行批量处理。本文以图片为例,介绍如何使用python实现图片的批量处理,包括批量命名,批量更改图像像素,批量对图片进行Harris、Canny……在此通过以下示例讲解图片遍历方法,并以shi-Tomasi角点检测算法为例,对图片进行批量处理。可实现的功能......

随机推荐

  1. php中PHPUnit框架实例用法

    本期给大家带来的框架是一个单元测试内容,本身不是很难的东西,大家觉得困难,可能是把自己框在了技术上,事实上,并非如此,我们没有设置好一个项目,不一定是自己的技术不达标,更多可能也许是对一个项目时间的安排的衡量和考虑并不全面,下面就大家遇到的一些问题,给大家编写以下内容,供大家参考。安装:compos......

  2. python requests模块的使用示例

    为什么使用requests:支持使用Cookie保持会话支持文件上传支持自动确定响应内容的编码对用户来说比较人性化模拟get请求:获取token# 使用微信公众平台举例get_param_dict={"grant_type":"**************",......

  3. 解决java中的父类私有成员变量的继承问题

    如果父类中属性为私有(private),那么能否被子类继承呢?答案是不可以。我们看如下简单代码class Father {private String name;public void sayHi() {System.out.println("My name is " + thi......

  4. Spring Security OAuth2.0认证授权四:分布式系统认证授权

    Spring Security OAuth2.0认证授权系列文章Spring Security OAuth2.0认证授权一:框架搭建和认证测试Spring Security OAuth2.0认证授权二:搭建资源服务Spring Security OAuth2.0认证授权三:使用JWT令牌前面几篇文章......

  5. Java关于继承、重写与重载、封装、接口的硬核干货

    Java语言在面向对象方面的知识点复杂繁琐,但是几乎是每个小伙伴学习编程必须踩的坑,其实,面向对象的底层都是一些计算机底层知识的结合,所以,不注重基础的程序猿,一定不是一个可以走的远的程序猿。那么,今天,我们先逐一地深入了解继承、重载、接口和构造器的知识。在学习这篇文章之前,如果有小伙伴对new过程......

  6. C#微信公众号推送消息接口消息排重

    用户在微信公众号发送文本,语音,图片等的普通消息时,微信服务器会向公众号配置的接收消息的地址转发用户消息,微信服务器若在5秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。这样的话,问题就来了。有这样一个场景:当用户关注微信账号时,获取当前用户信息,然后将信息写到数据库中。类似于pc端网站的......

  7. python类属性学习深入讲解

    class MyClass():# 直接将属性定义在类中,这种属性称为 类属性# 类属性可以通过实列对象和类对象访问,但是只能通过类对象修改# 类属性都是用来保存一些公共的数据a = 10def __init__(self):# 可以直接将属性添加到实列对象中,此时这个属性称为实例属性# 实例属性只......

  8. Python获取百度热搜的完整代码

    好久没写了,就把上课做的一个小东西拿出来分享一下吧。百度网页截图如下 ↓↓↓程序运行输出结果截图 ↓↓↓上代码 ↓↓↓from lxml import etreefrom lxml import htmlimport requestsheaders={'User-Agent':'Mozilla/5.......

  9. javascript中call,apply,bind的区别详解

    在JS中,这三者都是用来改变函数的this对象的指向的,他们有什么样的区别呢。在说区别之前还是先总结一下三者的相似之处:1、都是用来改变函数的this对象的指向的。2、第一个参数都是this要指向的对象。3、都可以利用后续参数传参。那么他们的区别在哪里的,先看一个例子。var xw = {name ......

  10. JS中循环遍历数组的四种方式总结

    本文比较并总结遍历数组的四种方式:for 循环:for (let index=0; index < someArray.length; index++) { const elem = someArray[index]; // ··· } for-in 循环:for......