当前位置: 首页> 房产> 建筑 > 维吉尼亚密文解密小程序

维吉尼亚密文解密小程序

时间:2025/7/9 19:46:06来源:https://blog.csdn.net/weixin_41905135/article/details/139990251 浏览次数:0次

维吉尼亚密文解密小程序

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

Vigenere 维吉尼亚密码

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

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

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

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

密文:vjieogrf

源码如下:

# 维吉尼亚密码解密
import tkinter as tk
from tkinter import ttkdef 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()

运行结果如下:
在这里插入图片描述

备注:GUI界面由AI生成。

请关注并转发我的微信公众号!

公众号
关键字:维吉尼亚密文解密小程序

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: