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 += char
    return 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 += char
    return 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 += char
    return 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 += char
    return 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

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

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

公众号

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

音视频入门基础:H.264专题(8)——H.264官方文档的描述符

音视频入门基础&#xff1a;H.264专题系列文章&#xff1a; 音视频入门基础&#xff1a;H.264专题&#xff08;1&#xff09;——H.264官方文档下载 音视频入门基础&#xff1a;H.264专题&#xff08;2&#xff09;——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

开发自动回复信息的插件:代码的力量与智慧!

在信息爆炸的时代&#xff0c;自动回复信息的插件成为了许多用户和管理者的得力助手&#xff0c;这些插件能够根据预设的规则或算法&#xff0c;自动、快速、准确地回复用户的信息&#xff0c;极大地提高了沟通效率和用户体验。 而开发这样一款插件&#xff0c;离不开一系列精…

这三款工具很好用,赶快试试

FileZilla FileZilla是一款免费开源的FTP软件&#xff0c;分为客户端版本和服务器版本&#xff0c;具备所有的FTP软件功能。它是一个快速、可信赖的FTP客户端以及服务器端开放源代码程序&#xff0c;具有多种特色和直觉的界面。FileZilla客户端版是一个方便高效的FTP客户端工具…

校企合作,为人才培养注入新动力

树莓集团在校企合作育人方面取得了显著成效&#xff0c;通过共建专业、定制课程、实习实训等多种方式&#xff0c;实现了教育资源的优化配置和高效利用&#xff0c;为高校和企业提供了更多的发展机会和合作空间。 1、共建专业与实验室&#xff1a;树莓集团与高校共同建设数字产…

Transformer教程之Transformer的历史背景

在现代人工智能领域&#xff0c;Transformer模型已经成为一种不可或缺的技术&#xff0c;它在自然语言处理&#xff08;NLP&#xff09;和计算机视觉等多个领域取得了巨大的成功。本文将带你回顾Transformer的历史背景&#xff0c;了解它是如何从最初的构想到今天的广泛应用的。…

分享一款永久免费内网穿透工具——巴比达内网穿透

最近在做web项目&#xff0c;想办法将web项目映射到公网进行访问&#xff0c;由于没有固定IP&#xff0c;只能使用内网穿透的方法&#xff0c;于是在网上搜索了一番&#xff0c;只有神卓互联旗下的这款巴比达内网穿透是真正免费的&#xff0c; 其它的要么用不了、要么限制没有流…

springcloud-config 客户端启用服务发现client的情况下使用metadata中的username和password

为了让spring admin 能正确获取到 spring config的actuator的信息&#xff0c;在eureka的metadata中添加了metadata.user.user metadata.user.password eureka.instance.metadata-map.user.name${spring.security.user.name} eureka.instance.metadata-map.user.password${spr…

Dataease配置Nginx代理

Dataease配置Nginx代理 一.修改前端静态资源地址和后端接口地址 **1.**修改应用程序的上下文路径 配置文件地址&#xff1a;backend/src/main/resources 找到文件application-whole.properties&#xff0c;做如下修改&#xff1a; **2.**修改前端静态资源路径和打包配置 配…

产品经理面试指南:四大专栏助你成功上岸

面对产品经理的职位面试&#xff0c;你是否感到有些紧张和迷茫&#xff1f;不用担心&#xff0c;我们为你精心准备了四大面试专栏&#xff0c;包括产品经理专业面试、部门负责人复试、HR面试以及面试技巧&#xff0c;让你在面试过程中如鱼得水&#xff0c;轻松应对。 01 产品经…

ScheduledThreadPoolExecutor和时间轮算法比较

最近项目中需要用到超时操作&#xff0c;对于不是特别优秀的timer和DelayQueue没有看。 Timer 是单线程模式。如果某个 TimerTask 执行时间很久&#xff0c;会影响其他任务的调度。Timer 的任务调度是基于系统绝对时间的&#xff0c;如果系统时间不正确&#xff0c;可能会出现…

视频多功能闪剪助手,智能去重去水印一键剪辑

这款软件具有全平台去水印的功能&#xff0c;无论视频来自哪个平台&#xff0c;无论水印的位置如何变换&#xff0c;它都能轻松去除。同时&#xff0c;它还支持各种去重方法&#xff0c;无论重复内容的形式如何&#xff0c;它都能一一识别并移除&#xff0c;让你的视频内容始终…

干货:ANR日志分析全面解析

ANR类型 出现ANR的一般有以下几种类型&#xff1a; 1:KeyDispatchTimeout&#xff08;常见&#xff09; input事件在5S内没有处理完成发生了ANR。 logcat日志关键字&#xff1a;Input event dispatching timed out 2:BroadcastTimeout 前台Broadcast&#xff1a;onReceiver在…

深圳技术大学oj B : 所有不含逆序对的组合数

Description 数组中可能包含重复的数字&#xff0c; 求由这些数字组成的不重复字符串&#xff0c; 且字符串中不包含逆序对。 Input 有若干组测试数据&#xff0c;&#xff08;1&#xff5e;20之间&#xff09; 每一组测试数据第一行输入一个整数 n (0 ≤ n ≤ 20)&#xff…

【Micro-ROS学习】

Micro-ROS 是专为 ROS 2 设计的&#xff0c;它允许在微控制器&#xff08;microcontrollers&#xff09;上实现ROS 2的功能。Micro-ROS 从 ROS 2 架构优化而来&#xff0c;目的是让那些资源有限的嵌入式设备也能够接入ROS 2生态系统&#xff0c;享受ROS 2带来的标准化通信、模块…

【Redis】三大Redis内存分析工具介绍(Redisinsight、RDR、RMA)

一、RedisInsight工具介绍 RedisInsight是一款Redis官方开源的可视化管理工具&#xff0c;旨在帮助开发人员和管理员更轻松地设计、开发和优化Redis应用程序。以下是关于RedisInsight的详细介绍&#xff1a; 1、工具概述 定义&#xff1a;RedisInsight是一个直观且高效的Red…

MySQL高级-索引-使用规则-覆盖索引回表查询

文章目录 1、覆盖索引1.1、查看索引1.2、删除单列索引 idx_user_pro1.3、查询 profession软件工程 and age31 and status01.4、执行计划 profession软件工程 and age31 and status01.5、执行计划 select id,profession,age,status1.6、执行计划 select id,profession,age,statu…

大数据------JavaWeb------MyBatis(完整知识点汇总)

MyBatis MyBatis简介 定义 它是一款优秀的持久层框架&#xff0c;用于简化JDBC开发它原来是Apache的一个开源项目iBatis&#xff0c;后来改名为MyBatis中文官网&#xff1a;https://mybatis.org/mybatis-3/zh_CN/index.html JaveEE三层架构 表现层&#xff08;做页面展示&…

AI 开发平台(Coze)搭建《美食推荐官》

前言 本文讲解如何从零开始&#xff0c;使用扣子平台去搭建《美食推荐官》 bot直达&#xff1a;美食推荐官 - 扣子 AI Bot (coze.cn) 欢迎大家体验一下&#xff01;&#xff01; 效果 正文 prompt 美食推荐官的首要任务就是推荐美食&#xff0c;基于这个我们要给他一个基…

【图像分类】Yolov8 完整教程 |分类 |计算机视觉

目标&#xff1a;用YOLOV8进行图像分类。 图像分类器。 学习资源&#xff1a;https://www.youtube.com/watch?vZ-65nqxUdl4 努力的小巴掌 记录计算机视觉学习道路上的所思所得。 1、文件结构化 划分数据集&#xff1a;train,val,test 知道怎么划分数据集很重要。 文件夹…

SQL注入漏洞—SQL注入简介与原理

一、SQL注入基础 1.1 什么是SQL注入漏洞 SQL注入漏洞从1998年圣诞节大火以来长盛不衰&#xff0c;虽然开发人员想出各种方法对他进行围追堵截&#xff0c;却始终无法将其赶尽杀绝&#xff0c;SQL注入的根本原因就是将SQL代码插入或添加到应用&#xff08;用户&#xff09;的输…