凯撒密码来源

古典密码,且属于单表加密
凯撒密码又称恺撒变换、变换加密,凯撒是当时罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。(当然只限于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. defer 延迟调用【GO 基础】

    〇.前言 在 Go 语言中,defer 是一种用于延迟调用的关键字. defer 在 Go 语言中的地位非常重要,它是确保资源正确释放和程序健壮性的关键字. 本文将通过示例对其进行专门的详解. 一.d ...

  2. 05 Ajax请求(扩展,延伸)

    05 Ajax请求(扩展,延伸) 首先, 我们用Flask创建一个后台服务器(自己做网站了哈) 目录结构: 服务端: from flask import Flask, render_template, ...

  3. #线性dp#CF1110D Jongmah

    题目 分析 考虑三个 \((i,i+1,i+2)\) 可以用 \((i,i,i)\) 和 \((i+1,i+1,i+1)\) 和 \((i+2,i+2,i+2)\) 代替, 所以这样的三元组本质上最多 ...

  4. 学会在 C++ 中使用变量:从定义到实践

    C++ 变量 变量是用于存储数据值的容器. 在 C++ 中,有不同类型的变量(使用不同的关键字定义),例如: int - 存储整数(没有小数点),例如 123 或 -123 double - 存储浮点 ...

  5. 我只用了3步,实现了一个逼真的3D场景渲染

    给3D模型及环境场景渲染出兼具质感和真实感的材质效果,需要经历几步? 显然,目前的3D模型材质渲染技术,还无法实现简单几步就能搞定的标准化作业来量化,完成一个质量过关的3D模型渲染,一般需要: 1.准 ...

  6. Stable diffusion 初学者指南

    1. Stable diffusion 初学者指南 想掌握Stable Diffusion AI技术吗? 这份初学者指南专为完全没接触过Stable Diffusion或任何AI图像生成器的新手设计. ...

  7. 开源相机管理库Aravis例程学习(一)——单帧采集single-acquisition

    目录 简介 源码 函数说明 arv_camera_new arv_camera_acquisition arv_camera_get_model_name arv_buffer_get_image_w ...

  8. 论文记载:A Survey on Traffic Signal Control Methods

    ABSTRACT 交通信号控制是一个重要且具有挑战性的现实问题,其目标是通过协调车辆在道路交叉口的移动来最小化车辆的行驶时间.目前使用的交通信号控制系统仍然严重依赖过于简单的信息和基于规则的方法,尽管 ...

  9. xilinx的serdes接收时钟坑

    ilinx的7 series fpga transceivers wizard用于自定义的serdes编码. 要选择多个serdes端口,如下图,点击对应的名称,然后右边选择use该设备就可以. 生成 ...

  10. dotnet 性能优化 利用哈希思想优化大对象集合相等判断性能

    利用哈希的其中一个思想,相同的对象的哈希值相同,可以用来提升一些大对象集合的进行对象相等判断的性能.大对象的相等判断指的是有某些类型的相等判断需要用到对象的很多属性或字段进行参与判断逻辑才能判断两个对 ...