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

news2024/11/23 9:03:12

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

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

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

公众号

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

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

相关文章

use embeddings stored in vector db to reduce work for LLM generating response

题意&#xff1a;使用存储在向量数据库中的嵌入来表示&#xff0c;以减少大型语言模型&#xff08;LLM&#xff09;生成响应的工作量。 问题背景&#xff1a; Im trying to understand what the correct strategy is for storing and using embeddings in a vector database, …

计算机网路面试HTTP篇三

HTTPS RSA 握手解析 我前面讲&#xff0c;简单给大家介绍了的 HTTPS 握手过程&#xff0c;但是还不够细&#xff01; 只讲了比较基础的部分&#xff0c;所以这次我们再来深入一下 HTTPS&#xff0c;用实战抓包的方式&#xff0c;带大家再来窥探一次 HTTPS。 对于还不知道对称…

海报在线制作系统源码小程序

轻松设计&#xff0c;创意无限 一款基于ThinkPHPFastAdminUniApp开发的海报在线制作系统&#xff0c; 本系统不包含演示站中的素材模板资源。​ 一、引言&#xff1a;设计新纪元&#xff0c;在线海报制作引领潮流 在数字时代&#xff0c;海报已成为传播信息、展示创意的重要媒…

松下的台灯值得入手吗?书客、飞利浦热门品牌横评分享!

自从儿子步入小学&#xff0c;他埋首于书桌前的时光愈发冗长&#xff0c;很欣慰他能够认真专心学习&#xff0c;却也隐隐担忧他的视力健康。在了解视力健康中发现长时间在过暗或过亮的光线环境下学习&#xff0c;会导致瞳孔频繁地收缩与扩张&#xff0c;极易引发视觉疲劳。更令…

Isaac Sim 9 物理(1)

使用Python USD API 来实现 Physics 。 以下内容中&#xff0c;大部分 Python 代码可以在 Physics Python 演示脚本文件中找到&#xff0c;本文仅作为个人学习笔记。 一.设置 USD Stage 和物理场景 Setting up a USD Stage and a Physics Scene USD Stage不知道怎么翻译&#…

开放式耳机怎么选?2024全价位段机型推荐,真人实测不踩雷

作为一位深度测评耳机的专家&#xff0c;我深知对于音乐制作人员而言&#xff0c;优选一副适宜的耳机是至关重要的。我的一位朋友&#xff0c;身为音乐编辑&#xff0c;常常需长时间戴着耳机进行音频编辑与混音。他尝试了众多开放式耳机后&#xff0c;仍未找到完美契合的款式。…

使用 go-control-plane 自定义服务网格控制面

写在前面 阅读本文需要最起码了解envoy相关的概念 本文只是一个类似于demo的测试&#xff0c;只为了学习istio&#xff0c;更好的理解istio中的控制面和数据面&#xff08;pilot -> proxy&#xff09;是如何交互的&#xff0c;下图的蓝色虚线 先说go-control-plane是什么…

安宝特方案 | AR术者培养:AR眼镜如何帮助医生从“看”到“做”?

每一种新药品的上市都需要通过大量的临床试验&#xff0c;而每一种新的手术工具在普及使用之前也需要经过反复的实践和验证。医疗器械公司都面临着这样的挑战&#xff1a;如何促使保守谨慎的医生从仅仅观察新工具在手术中的应用&#xff0c;转变为在实际手术中实操这项工具。安…

简化收支记录,只留关键日期! 一键掌握财务流动,高效管理您的每一笔收支

在繁忙的生活中&#xff0c;管理个人或家庭的财务收支变得尤为重要。然而&#xff0c;传统的记账方式往往繁琐且复杂&#xff0c;让人望而却步。今天&#xff0c;我们为您推荐一款简洁易用的记账神器——晨曦记账本&#xff0c;让您轻松记录收支&#xff0c;只显示日期&#xf…

三种三相交流电动机正反转互锁电路的分析

PLC和固态继电器应用都很普及了&#xff0c;常规电磁继电器还有用武之地吗?答案是&#xff1a;有用武之地的。因为微处理器的应用使逻辑控制发生了变革&#xff0c;极大地发挥了开关功能的特性&#xff0c;但在应用中&#xff0c;它还是无法承受较大的负载&#xff0c;因此还要…

PyTorch的环境配置和安装

PyTorch环境配置及安装 初步机器学习&#xff0c;这里记录下一些学习经过&#xff0c;之后以便于自己查看&#xff0c;同时欢迎各位大佬点评&#xff0c;本节是机器计算的一个包的安装和简单验证。 安装、使用环境 Windows环境下&#xff1a;CUDA官网使用IDM下载就很快乐&am…

3 滑动窗口

滑动窗口是一种常用的数据结构和算法思想&#xff0c;广泛应用于处理数组或序列中的连续片段问题。它的核心特点是窗口的大小可以动态调整&#xff0c;但总保持一个固定大小&#xff0c;通过在序列上“滑动”来检查不同的子序列。以下是滑动窗口的一些典型应用场景&#xff1a;…

帝国cms未审核文章可视化预览效果

有时候为了让编辑更加清楚的看到别人审核之后的效果&#xff0c;同时文章有需要下一级审核才能在前端展示出来&#xff0c;今天就来展示一个未审核文章预览审核后的效果 这次给某出版社开发的时候&#xff0c;他们需要实现编辑能够预览自己发布之后的审核效果&#xff0c;所以就…

想学gis开发,java和c++那个比较好?

ava与C的应用场景不同&#xff0c;究竟选择谁&#xff0c;应该由开发者的兴趣方向来决定。 你选择Java&#xff0c;意味着以后的业务方向就是偏后台服务开发&#xff0c;如果你非得说我用java也可以写界面&#xff0c;对不起&#xff0c;别人不会。 刚好我有一些资料&#xf…

从源码到上线:直播带货系统与短视频商城APP开发全流程

很多人问小编&#xff0c;一个完整的直播带货系统和短视频商城APP是如何从源码开发到最终上线的呢&#xff1f;今天&#xff0c;笔者将详细介绍这一全过程。 一、需求分析与规划 1.市场调研与需求分析&#xff1a;首先需要进行市场调研&#xff0c;了解当前市场的需求和竞争情…

移动端 UI 风格,书写华丽篇章

移动端 UI 风格&#xff0c;书写华丽篇章

电阻代码的谐音助记口诀

整理电子信息的课设&#xff0c;发现当时的笔记&#xff0c;记录一下&#xff0c;时间过得真快啊。 01234黑棕红橙黄 56789绿蓝紫灰白 银色和金色代表误差&#xff0c; 银色百分之十 金色百分之五 可以这么理解&#xff0c;运动会奖牌&#xff0c;金牌比银牌等级高&#xff…

简过网:考公务员报班和不报班的区别大吗?

备考公务员&#xff0c;究竟是报班还是不报班呢&#xff1f;一篇文章让你看看两者之间的区别&#xff01; 报不报班&#xff0c;其实这是很多考生都会纠结的地方&#xff0c;其实小编还是建议报个班的&#xff0c;这不仅仅是因为我是做这个行业的&#xff0c;更是因为这么长时…

用Microsoft.Extensions.Hosting 管理WPF项目.

首先引入必要的包: <ItemGroup><PackageReference Include"CommunityToolkit.Mvvm" Version"8.2.2" /><PackageReference Include"Microsoft.Extensions.Hosting" Version"8.0.0" /><PackageReference Include&q…

工商银行:低息差下的挣扎

时隔四年&#xff0c;市值再度超越贵州茅台成为A股“股王”。 今天要说的就是“宇宙行”——中国工商银行 虽然茅台的信仰开始崩塌&#xff0c;但各大银行股巨头们今年也不好过。2024年一季度六大行业绩集体受挫&#xff0c;息差普遍收窄超过20个基点。其中&#xff0c;包括工…