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

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 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生成

运行结果如下:
image.png
image.png

解密结果如下:

image.png

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

相关文章
|
2月前
|
人工智能 小程序
ROT5、ROT13、ROT18、ROT47全系列加解密小程序
ROT5、ROT13、ROT18、ROT47全系列加解密小程序
|
25天前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
166 3
|
1月前
|
小程序 API
微信小程序更新提醒uniapp
在小程序开发中,版本更新至关重要。本方案利用 `uni-app` 的 `uni.getUpdateManager()` API 在启动时检测版本更新,提示用户并提供立即更新选项,自动下载更新内容,并在更新完成后重启小程序以应用新版本。适用于微信小程序,确保用户始终使用最新版本。以下是实现步骤: ### 实现步骤 1. **创建更新方法**:在 `App.vue` 中创建 `updateApp` 方法用于检查小程序是否有新版本。 2. **测试**:添加编译模式并选择成功状态进行模拟测试。
43 0
微信小程序更新提醒uniapp
|
3月前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
103 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
3月前
|
小程序 前端开发 JavaScript
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
【避坑宝】是一款企业黑红名单吐槽小程序,旨在帮助打工人群体辨别企业优劣。该平台采用SpringBoot+MybatisPlus+uniapp+uview2等技术栈构建,具备丰富的注释与简洁的代码结构,非常适合实战练习与学习。通过小程序搜索“避坑宝”即可体验。
96 0
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
|
3月前
|
存储 小程序 JavaScript
|
3月前
|
小程序 前端开发 安全
|
4月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的汉服交易小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的汉服交易小程序的详细设计和实现(源码+lw+部署文档+讲解等)
60 7
|
4月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的宠物医院微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的宠物医院微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)
79 7
|
4月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的美食推荐小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的美食推荐小程序的详细设计和实现(源码+lw+部署文档+讲解等)
下一篇
无影云桌面