ROT5、ROT13、ROT18、ROT47全系列加解密小程序

ROT5、ROT13、ROT18、ROT47全系列加解密小程序

这几天在看CTF相关的课程,涉及到古典密码学和近代密码学还有现代密码学。自己编了一个关于ROT全系列的加、解密小程序。

​ ROT5、ROT13、ROT18、ROT47 编码是一种简单的码元位置顺序替换暗码。此类编码具有可逆性,可以自我解密,主要用于应对快速浏览,或者是机器的读取,而不让其理解其意。

ROT5 是 rotate by 5 places 的简写,意思是旋转5个位置,其它皆同。下面分别说说它们的编码方式:
ROT5:只对数字进行编码,用当前数字往前数的第5个数字替换当前数字,例如当前为0,编码后变成5,当前为1,编码后变成6,以此类推顺序循环。
ROT13:只对字母进行编码,用当前字母往前数的第13个字母替换当前字母,例如当前为A,编码后变成N,当前为B,编码后变成O,以此类推顺序循环。
ROT18:这是一个异类,本来没有,它是将ROT5和ROT13组合在一起,为了好称呼,将其命名为ROT18。
ROT47:对数字、字母、常用符号进行编码,按照它们的ASCII值进行位置替换,用当前字符ASCII值往前数的第47位对应字符替换当前字符,例如当前为小写字母z,编码后变成大写字母K,当前为数字0,编码后变成符号_。用于ROT47编码的字符其ASCII值范围是33-126。

源码如下:

import tkinter as tk
from tkinter import messagebox# ROT5加密函数
def rot5(text):result = ""for char in text:if char.isnumeric():result += str((int(char) + 5) % 10)else:result += charreturn result# ROT13加密函数
def rot13(text):result = ""for char in text:if char.isalpha():if char.islower():result += chr((ord(char) - 97 + 13) % 26 + 97)else:result += chr((ord(char) - 65 + 13) % 26 + 65)else:result += charreturn result# ROT18加密函数
def rot18(text):result = ""for char in text:if char.isalnum():result += chr((ord(char) - 48 + 18) % 10 + 48) if char.isnumeric() else chr((ord(char) - 65 + 18) % 26 + 65) if char.isupper() else chr((ord(char) - 97 + 18) % 26 + 97)else:result += charreturn result# ROT47加密函数
def rot47(text):result = ""for char in text:if 33 <= ord(char) <= 126:result += chr(33 + ((ord(char) - 33 + 47) % 94))else:result += charreturn result# 解密函数
def decrypt(text, function):if function == "ROT5":result = rot5(text)elif function == "ROT13":result = rot13(text)elif function == "ROT18":result = rot18(text)elif function == "ROT47":result = rot47(text)return result# 创建GUI界面
root = tk.Tk()
root.title("简单编码选择器")# 加密函数选择部分
tk.Label(root, text="选择加密函数:").pack()
var = tk.StringVar()
var.set("ROT5")functions = ["ROT5", "ROT13", "ROT18", "ROT47"]
frame = tk.Frame(root)
frame.pack()
for function in functions:tk.Radiobutton(frame, text=function, variable=var, value=function).pack(side=tk.LEFT)# 输入框
tk.Label(root, text="输入文本:").pack()
input_text = tk.Text(root, height=5, width=30)  # 设置文本框的高度和宽度
input_text.pack()# 输出结果标签
output_label = tk.Label(root, text="", anchor="w")  # 设置标签左对齐
output_label.pack()# 加密按钮和解密按钮排成一行显示
button_frame = tk.Frame(root)
button_frame.pack()# 加密按钮
def encrypt():text = input_text.get("1.0", "end-1c")  # 获取文本框中的所有文本selected_function = var.get()if selected_function == "ROT5":result = rot5(text)elif selected_function == "ROT13":result = rot13(text)elif selected_function == "ROT18":result = rot18(text)elif selected_function == "ROT47":result = rot47(text)output_label.config(text=f"加密后的文本:{result}")encrypt_button = tk.Button(button_frame, text="加密", command=encrypt)
encrypt_button.pack(side=tk.LEFT)# 解密按钮
def decrypt_text():text = input_text.get("1.0", "end-1c")  # 获取文本框中的所有文本selected_function = var.get()result = decrypt(text, selected_function)output_label.config(text=f"解密后的文本:{result}")decrypt_button = tk.Button(button_frame, text="解密", command=decrypt_text)
decrypt_button.pack(side=tk.LEFT)root.mainloop()

备注:GUI由AI生成

运行结果如下:

Screenshot 2024-06-27 at 16.31.42

Screenshot 2024-06-27 at 16.32.01

解密结果如下:

Screenshot 2024-06-27 at 16.32.55

以上运行结果与在线工具对比完全正确!

我的微信公众号欢迎大家点赞、转发、关注!

公众号

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

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

相关文章

【铂电阻测温】如何保证热电阻采集的可靠性

TPS02RAH的输出接口为I2C&#xff0c;支持主机动态更改模块I2C地址&#xff0c;实现了单I2C总线挂载多个TPS02RAH测温模块的功能。 TPS02RAH的输出接口为I2C&#xff0c;支持主机动态更改模块I2C地址&#xff0c;实现了单I2C总线挂载多个TPS02RAH测温模块的功能。 参考链接 【…

SQL查询的执行流程

SQL查询的执行流程 ✨ 1、书写顺序和执行顺序✨ 2、SQL的执行流程✨ 3、WHERE与ON的使用 ✨ 1、书写顺序和执行顺序 查询是DBMS&#xff08;OLTP&#xff09;和OLAP中最常用的操作。我们在理解SELECT语法的时候&#xff0c;还需要了解SELECT执行时的底层原理。只有这样&#xf…

基于运动方程的多种滤波器仿真比较(KF\EKF\IMM\MC\IKF\UKF)

EKF_3.m KF_6.m kfilter.m MC.m trackAEKF.m trackEKF.m trackEKF_8.m trackEKF_Z5.m tracklMM.m trackKF.m trackUKF.m %-------------------

SquareLine Studio:快速创建美观的用户界面

文章目录 SquareLine Studio 简介1.1 什么是 SquareLine Studio1.2 目标用户群体 功能与服务2.1 拖放式 UI 编辑器2.2 订阅计划 下载与安装3.1 当前版本下载3.2 下载存档 保持更新4.1 订阅新闻通讯订阅流程新闻通讯内容订阅的好处 其他资源5.1 快速链接5.2 开发者服务 应用场景…

领夹麦克风什么样的好,麦克风品牌排行榜前十名,无线麦克风推荐

​在人人可做自媒体的时代&#xff0c;众多普通人加入自媒体。对拍视频的自媒体人&#xff0c;好内容是基础&#xff0c;好设备是保障。想提升视频音质需专业无线麦克风。现无线麦克风品牌多&#xff0c;如何少花钱买高性价比产品是问题。作为资深自媒体人&#xff0c;我用过的…

c++题目_怎么又得数颜色

题目背景 这个暑假&#xff0c;小Z的空闲时间都在看2020东京奥运会。 看着看着&#xff0c;小Z想出了一个问题。 题目描述 小Z得到了一些国家的获奖信息&#xff0c;他想让你帮助他生成一下“奥运奖牌榜”。 获奖信息有很多行&#xff0c;每行包含两部分&#xff1a;第一部…

idea中,我获取了getTotal方法,如何自动在等式左边生成一个接收的变量呢: page.getTotal();

在 IntelliJ IDEA 中&#xff0c;可以通过以下步骤让 IDEA 自动生成一个变量来接收 page.getTotal() 的返回值&#xff1a; 光标定位&#xff1a; 将光标放置在 page.getTotal(); 这行代码的末尾。 快捷键&#xff1a; 按 Alt Enter (Windows/Linux) 或 Option Enter (Mac) 以…

postgreSQL学习

postgreSql学习 学习参考&#xff1a;1、命令1.1 登录1.2 关闭连接 2、常用数据类型2.1 数值类型2.2 字符串类型2.3 时间2.4 其他 3、自增主键4、sql4.1 库操作&#xff08;1&#xff09;创建新库&#xff08;2&#xff09;切换数据库&#xff08;3&#xff09;删库【谨慎&…

电子看板,实现生产现场数字化管理

如何提高生产效率、优化资源配置、保障产品质量&#xff0c;成为企业在激烈竞争中脱颖而出的关键。电子看板作为一种创新的生产管理工具&#xff0c;为实现生产现场数字化管理提供了有力支持。电子看板是生产现场的“智能窗口”&#xff0c;它能够实时、准确地展示各类关键信息…

《2024年新生代妈妈真实孕育状态洞察报告》

专注于行业分析与市场研究的专业机构易观分析,正式发布了其最新研究成果——《2024年新生代妈妈真实孕育状态洞察报告》。该报告深入探讨了新生代妈妈在孕育过程中的实际需求与挑战,通过对母婴行业的市场规模、消费行为、用户触媒习惯、用户关怀以及特定品类场景的细致分析,揭示…

日元跌破160大关,日本当局何时干预?

KlipC报道&#xff1a;6月26日&#xff0c;日元又跌了&#xff0c;美元兑日元跌破160的整关口&#xff0c;超过了4月日本官员在市场上干预的水平&#xff0c;创1986年来新低。美联储降息的可能性降低&#xff0c;市场预计日元有可能延续当前的弱势。 KlipC分析师David表示&…

Ubuntu 20.04安装显卡驱动、CUDA、Pytorch(2024.06最新)

文章目录 一、安装显卡驱动1.1 查看显卡型号1.2 根据显卡型号选择驱动1.3 获取下载链接1.4 查看下载的显卡驱动安装文件1.5 更新软件列表和安装必要软件、依赖1.6 卸载原有驱动1.7 禁用默认驱动1.8 安装lightdm显示管理器1.9 停止显示服务器1.10 在文本界面中&#xff0c;禁用X…

关于新零售的一些思考

本文作为2024上半年大量输入之后的核心思考之一。工作到一定阶段之后&#xff0c;思考的重要性越来越高&#xff0c;后续会把自己的个人思考记录在这个新系列《施展爱思考》。背景是上半年面临业务转型从电商到新零售&#xff0c;本文是相关大量输入之后的思考&#xff0c;对新…

浅析Resource Quota中limits计算机制

前言 在生产环境中&#xff0c;通常需要通过配置资源配额&#xff08;Resource Quota&#xff09;来限制一个命名空间&#xff08;namespace&#xff09;能使用的资源量。在资源紧张的情况下&#xff0c;常常需要调整工作负载&#xff08;workload&#xff09;的请求值&#xf…

生信实证系列Vol.15:如何用AlphaFold2,啪,一键预测100+蛋白质结构

"结构就是功能"——蛋白质的工作原理和作用取决于其3D形状。 2020年末&#xff0c;基于深度神经网络的AlphaFold2&#xff0c;一举破解了困扰生物学界长达五十年之久的“蛋白质折叠”难题&#xff0c;改变了科学研究的游戏规则&#xff0c;可以从蛋白质序列直接预测…

MySQL高级-索引-使用规则-前缀索引

文章目录 1、前缀索引2、前缀长度3、查询表数据4、查询表的记录总数5、计算并返回具有电子邮件地址&#xff08;email&#xff09;的用户的数量6、从tb_user表中计算并返回具有不同电子邮件地址的用户的数量7、计算唯一电子邮件地址&#xff08;email&#xff09;的比例相对于表…

Spring Cloud Alibaba之声明式服务调用框架OpenFeign

实例演示1&#xff1a;使用OpenFeign调用服务 基于nacos的服务提供者&#xff1a; 创建SimpleOpenFeign的maven项目&#xff0c;添加pom依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-…

MySQL中Explain执行计划各参数的含义

EXPLAIN 语句输出的各个列的作用先大致罗列一下&#xff1a; 列名 描述 id 在一个大的查询语句中每个SELECT关键字都对应一个唯一的id select_type SELECT关键字对应的那个查询的类型 table 表名 partitions 匹配的分区信息 type 针对单表的访问方法 possible_keys…

VR加密方案常见问题有哪些?

在数字化时代&#xff0c;随着虚拟现实&#xff08;VR&#xff09;技术的迅速发展与普及&#xff0c;VR视频内容的安全传输成为关注焦点。为保护版权及敏感信息免遭非法复制或篡改&#xff0c;VR视频加密技术显得尤为重要。 首先&#xff0c;高效的加密算法对确保数据安全性至关…

动态流体工厂大屏

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 namespace 动态流体工厂大屏 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){Task.Run(() >{while (true){this.Invoke(() >…