维吉尼亚密文解密小程序 原创

简介: 维吉尼亚密文解密小程序 原创

维吉尼亚密文解密小程序
这几天在看CTF相关的课程,涉及到古典密码学和近代密码学还有现代密码学。自己编了一个解密小程序。

Vigenere 维吉尼亚密码

维吉尼亚是多表替换密码中比较典型的代表,维吉尼亚密码是在凯撒密码基础上产生的一种加密方法, 它将凯撒密码的全部25种位移排序为一张表,与原字母序列共同组成26行及26列的字母表。另外,维吉尼亚密码必须有一个密钥,这个密钥由字母组成,最少一个,最多可与明文字母数量相等。

现有明文:vigenere和密钥:Abc(不区分大小写)

首先,密钥长度需要与明文长度相同,如果少于明文长度,则重复拼接直到相同。本例中,明文长度为3 个字母(非字母均被忽略),密钥会被程序补全为"abcabcab"。

  • 维吉尼亚密码只对字母进行加密,不区分大小写,若文本中出现非字母字符会原样保留。
  • 如果输入多行文本,每行是单独加密的。

密文:vjieogrf

源码如下:

# 维吉尼亚密码解密
import tkinter as tk
from tkinter import ttk

def decrypt_vigenere():
    content = content_entry.get()
    key = key_entry.get()
    flag = ''
    key_to_num = [ord(k) - 97 for k in key.lower()]
    for i in range(len(content)):
        if content[i].islower():
            flag += chr((ord(content[i]) - 97 - key_to_num[i % len(key)]) % 26 + 97)
        elif content[i].isupper():
            flag += chr((ord(content[i]) - 65 - key_to_num[i % len(key)]) % 26 + 65)
        else:
            flag += content[i]
    decrypted_entry.delete(0, tk.END)  # 清空解密结果框
    decrypted_entry.insert(0, flag)  # 在解密结果框中插入解密后的文本

# 创建 GUI 窗口
window = tk.Tk()
window.title("维吉尼亚密文解密小程序 微信公众号--强壮Python")

# 创建控件
content_label = ttk.Label(window, text="密 文:")
content_entry = ttk.Entry(window, width=60)
key_label = ttk.Label(window, text="密 钥:")
key_entry = ttk.Entry(window, width=60)
decrypted_label = ttk.Label(window, text="解密输出:")
decrypted_entry = ttk.Entry(window, width=60)

# 布局控件
content_label.grid(row=0, column=0, sticky="w")
content_entry.grid(row=0, column=1)
key_label.grid(row=1, column=0, sticky="w")
key_entry.grid(row=1, column=1)

decrypted_label.grid(row=3, column=0, sticky='w')
decrypted_entry.grid(row=3, column=1)
decrypt_button = ttk.Button(window, text="解 密", command=decrypt_vigenere)
decrypt_button.grid(row=4, column=0, columnspan=2)

# 运行窗口
window.mainloop()

运行结果如下:

image.png

备注:GUI界面由AI生成。

相关文章
|
2月前
|
人工智能 小程序 数据安全/隐私保护
维吉尼亚密文解密小程序
维吉尼亚密文解密小程序
|
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+部署文档+讲解等)
下一篇
无影云桌面