凯撒密码来源

古典密码,且属于单表加密
凯撒密码又称恺撒变换、变换加密,凯撒是当时罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。(当然只限于26个字母的加密解密)
我觉得叫带有’变换’俩字的好,因为这个算法就是将信息移动替换的过程。

加密算法

  • 凯撒密码是对单个字母加密,因此加密的时候会采用循环加密

  • 解释
    将26个字母按照横排顺序排好,然后密钥就是将26个字母向右移动的位数,这里的移动位数遵循模运算,比如原本的26个字母表中z右移一位就变成了a,原本的26个字母表中a左移一位就变成了z。
    算法就是加上加密算法和一些自己定义的细节比如全部大写或者全部小写,追求精益求精的还可以记住用户输入的内容的大小写然后根据他的内容进行加密。
    下面的代码就是不管用户是否大小写,最后出来的结果我全部转为大写了。

  • 最主要的步骤还是将其移动后的字母的数字要模26,因为凯撒的明文空间就是26个,密文空间也是26个。所以key即使你写得再大,最后在加密步骤中模26后仍旧回到26个信息空间。
    下面代码最重要一步就是 (ord(ch.upper()) - ord(‘A’) + int(key)) % p
    先让字母转为凯撒明文空间中的对应数字,然后再加上密钥移动位数再模26.

# 加密
message=input('请输入加密内容')
p = 26
key = input('请输入密钥')
# 首先将所有信息转化为大写字母, 非字母的不进入存储
for ch in message:
# 这里的\单纯只是将代码换行,因为太长了
if ord('A') <= ord(ch) <= ord('Z') \
or ord('a') <= ord(ch) <= ord('z'):
temp_num = (ord(ch.upper()) - ord('A') + int(key)) % p
cipher.append(temp_num) #首先打印其Cipher数字
print(cipher) #将其ASCII数字转化为大写字母
message=''
for i in cipher: # 将列表转化为字符串输出
message += chr(i + ord('A')) #打印输出密文
print(message)

解密算法

  • 解释
    与加密算法反过来,转为对应凯撒明文空间中对应的数字之后用密钥数字将其左移回去再模26,在模运算的世界里不用担心出现负数,因为负数最后模出来的还在模数的范围内。
  • 注意:解密密钥必须和加密密钥相同,或者你的密钥模26后是与原密钥相同(因为模运算世界中只要超过模数的就能将其模回来对应的数字,所以即使你数字给的再大不过也是你模数的空间内)
cipher=input('请输入明文')
p = 26
key = input('请输入密钥') #密钥必须与你加密的密钥相同
# 解码
p = 26
#存放解密密文的数字
deCipher = []
for ch in cipher:
if ord('A') <= ord(ch) <= ord('Z') or ord('a') <= ord(ch) <= ord('z'):
temp = (ord(ch.upper()) - int(key) - ord('A')) % p
deCipher.append(temp) # 输出
message = ''
for i in deCipher:
message += chr(i + ord('A')) #转为ASCII输出
#输出明文
print(message)

密码学—凯撒密码Python程序的更多相关文章

  1. Python的一个解释凯撒密码的程序

    #!/usr/bin/env python # -*- coding: utf-8 -*- ''' { Title:CaserCode Author:naiquan Type:crypto Detai ...

  2. Python用户名密码登录系统(MD5加密并存入文件,三次输入错误将被锁定)及对字符串进行凯撒密码加解密操作

    # -*- coding: gb2312 -*- #用户名密码登录系统(MD5加密并存入文件)及对字符串进行凯撒密码加解密操作 #作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.co ...

  3. 凯撒密码移位python

    #!/usr/bin/python'''凯撒密码'''a="gmbhqwertghjkcvbzn"s=[""]*len(a)for j in range(26) ...

  4. Python凯撒密码和括号匹配

    1.凯撒密码: 除了特殊字符不转化,其余的按照规定经行转译,以下以a~z和A~Z的字符都进行转译. plaincode = input("")print(len(plaincode ...

  5. Python凯撒密码加解密

    #凯撒密码第一个版本 #加密 pxpt=input("请输入明文文本:") for p in pxpt: if 'a'<=p<='z': print(chr(ord(' ...

  6. JAVA第一次实验 ——凯撒密码的实现

    JAVA实验一   编写程序实现凯撒密码 201352330 潘俊洋 一.实验说明 凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加 ...

  7. java:凯撒密码及String的应用

    一,凯撒密码 古罗马皇帝凯撒在打仗时曾使用过以下方法加密军事情报 现在用java实现 程序设计思想: 1,字符串首先要转化为字符数组,才能依次加密 2,当原来的字符为X,Y,Z时,加密后要转化为A,B ...

  8. 凯撒密码加密解密--JAVA实现(基础)

    凯撒密码一种代换密码,据说凯撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码.凯撒密码的基本思想是:通过把字母移动一定的位数来实现加密和解密.明文中的所有字母都在字母表上向后(或向前) ...

  9. JAVA第一次实验 ——凯撒密码

    课程:Java程序设计 班级:1352 姓名:黄伟业 学号:20135215 成绩:            指导教师:娄嘉鹏  实验日期:2015.4.15 实验密级: 预习程度:  实验时间:19: ...

  10. 凯撒密码(Caesar cipher) 详解

    ------------恢复内容开始------------ 最近训练CTF的时候,发现密码学这块的知识不太系统,所以自己接下来会陆陆续续整理出来 就先从古典密码中的凯撒密码说起吧 凯撒密码内容比较简 ...

随机推荐

  1. 面试官:Session和JWT有什么区别?

    Session 和 JWT(JSON Web Token)都是用于在用户和服务器之间建立认证状态的机制,但它们在工作原理.存储方式和安全性等方面存在着一些差异,下面我们一起来看. 1.什么是JWT? ...

  2. 基于istio实现多集群流量治理

    本文分享自华为云社区<基于istio实现多集群流量治理>,作者: 可以交个朋友. 一 背景 对多云.混合云等异构基础设施的服务治理是Istio重点支持的场景之一.为了提高服务的可用性,避免 ...

  3. mysql 重新整理——索引优化explain简单介绍 [八]

    前言 做开发的我们晓得一个道理,就是说不是说你说这东西性能稳定就是性能稳定,你说发版本就发版本,这个是测试部门说了算的. 那么索引优化的关键也就是说一个我们来逐步调优,调优就要知道我们这条语句在mys ...

  4. Pytorch DistributedDataParallel(DDP)教程二:快速入门实践篇

    一.简要回顾DDP 在上一篇文章中,简单介绍了Pytorch分布式训练的一些基础原理和基本概念.简要回顾如下: 1,DDP采用Ring-All-Reduce架构,其核心思想为:所有的GPU设备安排在一 ...

  5. 树莓派和esp8266在局域网下使用UDP通信,esp8266采集adc数据传递给树莓派,树莓派在web上显示结果

    树莓派和esp8266需要在同一局域网下 esp8266使用arduino开发: 接入一个电容土壤湿度传感器,采集湿度需要使用adc #include <ESP8266WiFi.h> #i ...

  6. pypinyin 获取拼音,作为智能设备的唤醒比对结果

    from pypinyin import lazy_pinyin,TONE,TONE2,TONE3,NORMAL a = "小七同学" b = "小琦同学" c ...

  7. 剑指offer04(Java)二维数组中的查找(中等)

    题目: 在一个 n * m 的二维数组中,每一行都按照从左到右 非递减 的顺序排序,每一列都按照从上到下 非递减 的顺序排序.请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有 ...

  8. 链栈的实现 C语言/C++

    堆栈的链式存储C/C++实现--链栈 与顺序栈相比,链栈的优点在于不存在栈满上溢的问题.链栈通常使用单链表实现,进栈.出栈操作就是在单链表表头的 插入.删除操作.用单链表实现链栈时,使用不带头结点的单 ...

  9. 技术干货| 阿里云基于Hudi构建Lakehouse实践探索「内附干货PPT下载渠道」

    ​简介: 阿里云高级技术专家王烨(萌豆)在Apache Hudi 与 Apache Pulsar 联合 Meetup 杭州站上的演讲整理稿件,本议题介绍了阿里云如何使用 Hudi 和 OSS 对象存储 ...

  10. Flink 1.14 新特性预览

    ​简介: 一文了解 Flink 1.14 版本新特性及最新进展 本文由社区志愿者陈政羽整理,内容源自阿里巴巴技术专家宋辛童 (五藏) 在 8 月 7 日线上 Flink Meetup 分享的<F ...