大数据安全 | 【实验】凯撒加密与解密

news2024/11/25 2:32:36

文章目录

  • 📚实验目的
  • 📚关于凯撒加密
    • 🔥输入任意明文和密钥K=10,对其进行凯撒加密;
    • 🔥输入密文和密钥K=10,对其进行凯撒解密。
    • 🔥(暴力)破译密文
  • 📚分析体会

📚实验目的

  • 通过实际编程掌握凯撒密码的加密、解密与破译,加深对凯撒密码算法的认识。
  • 1)输入任意明文和密钥K=10,对其进行凯撒加密;
  • 2)输入密文和密钥K=10,对其进行凯撒解密。
  • 3)破译如下密文:Izqzm piyzmznodhvoz tjpm kjrzm oj xcvibz tjpmnzga!

📚关于凯撒加密

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实际上就是k是几,就移几位。移位加密的安全性——!!——暴力穷举:把25种可能都试一遍。

🔥输入任意明文和密钥K=10,对其进行凯撒加密;

  1. 首先通过input函数获取用户输入的明文和密钥。
  2. 然后通过循环遍历明文中的每个字符。
    1. 对于空格字符,不进行加密处理,直接保留;
    2. 对于小写字母,通过计算将其位移n个位置后,再转换为相应的ASCII码,也就是小写输出为小写。
    3. 对于其他情况,默认为大写字母,同样通过计算进行位移加密。大写输出为大写。
  3. 最后,将加密后的字符逐个拼接起来,并输出为密文。
a = input("请输入你想要加密的明文:")
n = int(input("请输入你的密钥:"))
b = ""
for letter in a:
    if letter == " ":  
        temp = " "#空格不加密
    elif letter.islower():# 判断是否为小写字母
        temp = chr((ord(letter) - ord("a") + n) % 26 + ord("a"))  # 加密后保持小写
    else:  # 其他情况默认为大写字母
        temp = chr((ord(letter) - ord("A") + n) % 26 + ord("A"))  # 加密后保持大写
    b += temp#将加密后的字符逐个拼接起来
print("密文为:",b)

在这里插入图片描述

🔥输入密文和密钥K=10,对其进行凯撒解密。

  1. 首先通过input函数获取用户输入的密文和密钥。
  2. 然后通过循环遍历明文中的每个字符。
    1. 对于空格字符,不进行解密处理,直接保留;
    2. 对于小写字母,通过计算将其位移n个位置后,再转换为相应的ASCII码,也就是小写输出为小写。
    3. 对于其他情况,默认为大写字母,同样通过计算进行位移解密。大写输出为大写。
  3. 最后,将解密后的字符逐个拼接起来,并输出为明文。
a = input("请输入你想要解密的密文:")
n = int(input("请输入你的密钥:"))
b = ""
for letter in a:
    if letter == " ":  
        temp = " " # 空格不加密
    elif letter.islower():  # 判断是否为小写字母
        temp = chr((ord(letter) - ord("a") - n) % 26 + ord("a"))  # 解密后保持小写
    else:  # 其他情况默认为大写字母
        temp = chr((ord(letter) - ord("A") - n) % 26 + ord("A"))  # 解密后保持大写
    b += temp  # 将解密后的字符逐个拼接起来
print("明文为:",b)

在这里插入图片描述

🔥(暴力)破译密文

  1. 首先定义了三个字符串变量total、upper和lower分别表示所有字母字符、大写字母和小写字母。
  2. 通过input函数获取用户输入的密文。接下来,通过循环从1到25(共25个可能的钥匙,这里默认先不考虑0,也就是不移位)遍历所有钥匙值。
  3. 在内层循环中,对于密文中的每个字符进行处理。
    1. 首先判断字符是否在字母字符total中。如果是,则判断字符是大写字母还是小写字母。
    2. 对于大写字母,通过字符串方法find()函数找到字符在upper中的位置,然后进行钥匙的逆向位移操作;
    3. 对于小写字母,通过字符串方法find()函数找到字符在lower中的位置,然后进行钥匙的逆向位移操作。处理完字符后,将解密后的字符追加到字符串b的末尾。
    4. 如果字符不在字母字符total中,则直接将字符追加到字符串b的末尾。
  4. 最终,输出每个钥匙对应的解密结果。
total = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
lower = "abcdefghijklmnopqrstuvwxyz"

a = input("请输入你要破解的密文:")
for key in range(1,26):
    b = ""
    for i in a:
        if i in total:
            if i.isupper():  #密文字母为大写
                num = upper.find(i)  #在字母里搜索到密文字符的位置
                num = num - key
                if num < 0:
                    num = num + len(upper)
                b = b + upper[num]  #将解密后字符追加到字符串末尾
            elif i.islower():  #密文字母为小写
                num = lower.find(i)  #在字母里搜索到密文字符的位置
                num = num - key
                if num < 0:
                    num = num + len(lower)
                b = b + lower[num]  #将解密后字符追加到字符串末尾
        else:
            b = b + i  #如果密文中内容不在字母里则不解密,直接追加
    print('第%d把钥匙的结果是%s' %(key, b)) 

在这里插入图片描述

  • 破解得:Never underestimate your power to change yourself!

📚分析体会

凯撒加密是一种简单而易于理解的加密方法,但由于只有26个可能的位移值,因此被认为是相对较弱的加密算法。在现代密码学中,它通常被用作教学示例或简单的加密需求,而不适用于安全性要求较高的场景。


参考博客:

  • Python基础编程入门实例:恺撒密码
  • python 内置函数ord()和chr()函数用法详解
  • python中islower()、isupper()、istitle()函数的用法详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1009677.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GNSS(二):融合策略

文章目录 一、背景二、松耦合融合策略1. 信息有效性判断2. 坐标系对齐3. 观测方程a.杆臂补偿b.速度融合c.位置融合1) 置信度设置 d. 航向yaw融合 4.观测性分析1&#xff09;状态表示在VIO坐标系下的观测性分析2&#xff09;状态表示在GPS ENU坐标系下的观测性分析 三、紧耦合融…

linux log日志文件切割 提取时间段 某天 日志

# 将service-23082202.log文件中 2023-09-05 08:00:00 到 2023-09-05 10:00:00 时段内的日志内容提取到20230905.log文件中 sed -n /2023-09-05 08:00:00/,/2023-09-05 10:00:00/p service-23082202.log >> 20230905.log

盘点中国光博会CIOE2023上的国货

一、中国光博会历史地位 CIOE中国光博会首次举办于1999年&#xff0c;经历24年在行业的深耕及拓展&#xff0c;是全球极具规模及影响力的综合型展会&#xff0c;见证了中国光电行业的变化及蓬勃发展。无论是超高清视频领域还是AI应用领域&#xff0c;均属于近年来的热门赛道&a…

软件设计师-UML基础教程

场景 针对UML1.5各种模型图的构成和功能进行说明。 UML概述 UML简介 UML (Unified Modeling Language)为面向对象软件设计提供统一的、标准的、可视化的建模语言。 适用于描述以用例为驱动&#xff0c;以体系结构为中心的软件设计的全过程。 UML的定义包括UML语义和UML表…

C++(day2)

封装一个结构体&#xff0c;结构体中包含一个私有数组&#xff0c;用来存放学生的成绩&#xff0c;包含一个私有变量&#xff0c;用来记录学生个数&#xff0c; 提供一个公有成员函数&#xff0c;void setNum(int num)用于设置学生个数 提供一个公有成员函数&#xff1a;void…

【PHP】麻醉临床信息系统

麻醉临床信息系统以服务围术期临床业务工作的开展为核心&#xff0c;为医护人员、业务管理人员、院级领导提供流程化、信息化、自动化、智能化的临床业务综合管理平台。 麻醉信息系统处理的数据包含病人的手术信息、麻醉信息、病人手术过程中从监护仪上采集到的数据和病人情况等…

互联网医院系统|互联网医院探索未来医疗的新蓝海

随着互联网技术的飞速发展&#xff0c;互联网医院应运而生&#xff0c;为人们带来全新的医疗体验。本文将深入探讨互联网医院的开发流程、系统优势以及未来发展方向&#xff0c;带您领略医疗领域的新蓝海。互联网医院的开发流程是一个结合技术、医疗和用户需求的复杂过程。首先…

python可视化记录训练过程

可视化训练曲线 wandb基本流程离线运行wandb保存最佳结果及模型界面 tensorboard基本流程SummaryWriter 所提供的其他方法 wandb 基本流程 安装wandb pip install wandb注册wandb账号 然后在wandb官网注册一个账号&#xff0c;然后获取该账号的私钥。然后在命令行执行&#xf…

无涯教程-JavaScript - AND函数

描述 如果AND函数的所有参数都为TRUE,则返回TRUE&#xff1b;如果一个或多个参数为FALSE,则返回FALSE。 AND功能的一种常见用法是扩展执行逻辑测试的其他功能的用途。如,IF函数执行逻辑测试,如果测试判断为TRUE,则返回一个值,如果测试判断为FALSE,则返回另一个值。通过将AND函…

SkyWalking安装部署

一、概念 1、什么是 APM 系统&#xff1f; APM&#xff08;Application Performance Management&#xff09;即应用性能管理系统&#xff0c;是对企业系统即时监控以实现对应用程序性能管理和故障管理的系统化的解决方案。应用性能管理&#xff0c;主要指对企业的关键业务应用…

网络安全宣传周|这些网络安全知识赶紧get起来~

2023年9月11日至17日是第十个国家网络安全宣传周。今年的国家网络安全宣传周主题是“网络安全为人民&#xff0c;网络安全靠人民”。 网络安全是国家安全的重要组成部分&#xff0c;没有网络安全就没有国家安全&#xff0c;就没有经济社会稳定运行&#xff0c;广大人民群众利益…

工欲善其事,必先利其器,这5款利器推荐你

​ 工欲善其事&#xff0c;必先利其器。要想提升工作效率&#xff0c;除了提升自己的能力以外&#xff0c;好的工具也是必不可少的一环&#xff0c;今天给大家推荐5款办公必备的神器。 1.鼠标手势增强——MouseInc ​ MouseInc 是一款由知名的浏览器优化大神开发的系统全局鼠…

炒期权的资金门槛是多少 ?

期权是一种合约&#xff0c;买方向卖方支付一定费用后有权利在特定的时间&#xff0c;以特定的价格买入或卖出一定数量的特定资产&#xff0c;卖方需履行相应义务&#xff0c;期权开户支持线上和零门槛开头&#xff0c;下文介绍炒期权的资金门槛是多少 ?本文来自&#xff1a;期…

uniapp打包安卓后在安卓屏上实现开机自启动

实现开机自启动(使用插件) 打开插件地址安卓开机自启动 Fvv-AutoStart - DCloud 插件市场 使用方法 选择你要开启自启动的项目 在项目的manifest.json中app-plus下写入以下代码 注意需要替换 android_package_name 为自己的,不然无法进行安卓apk打包 "nativePlugins&q…

uniapp抽取组件绑定事件中箭头函数含花括号无法解析

版本: "dcloudio/uni-ui": "^1.4.27", "vue": "> 2.6.14 < 2.7"... 箭头函数后含有花括号的时候, getData就拿不到val参数 , 解决办法就是去除花括号 // 错误代码: <SearchComp change"(val) > { getData({ val …

记LGSVL Map Annotation(3)利用map annotation生成一个十字路口的opendrive格式地图

参考&#xff1a;b站 1. 创建一个平面 为什么创建平面 2.选择HD map annotaion

ZTMap是如何在相关政策引导下让建筑更加智慧化的?

近几年随着智慧楼宇概念的深入&#xff0c;尤其是在“十四五规划”“新基建”“数字经济”等相关战略和政策的引导下&#xff0c;智慧楼宇也迎来了快速发展期&#xff0c;对推动智慧城市系统的建设越来越重要。那么究竟什么是智慧楼宇呢&#xff1f;智慧楼宇其实就是整合楼宇内…

RabbitMQ常见问题

一、RabbitMQ如何保证消息不丢失&#xff1f; 这是面试时最喜欢问的问题&#xff0c;其实这是个所有MQ的一个共性的问题&#xff0c;大致的解 决思路也是差不多的&#xff0c;但是针对不同的MQ产品会有不同的解决方案。而RabbitMQ 设计之处就是针对企业内部系统之间进行调用设…

实战演练 | Navicat 安全可靠的数据传输功能

数据库数据传输是指将数据库中的数据从一个数据库系统传送到另一个数据库系统的过程。数据传输在数据迁移、数据同步、备份与恢复、数据库整合和数据分发等场景中使用非常广泛。 Navicat 安全可靠的数据传输功能可以让用户方便快捷地实现从一个数据库或模式传输对象到另一个数…

vue 翻页选择导出

框架Vue2.15.14&#xff0c;后台是Aps.net core Api <el-table ref"multipleTable" :data"tableData" tooltip-effect"light" style"width: 100%;text-align: center;"height"400" show-harder selection-change"h…