埃特巴什码加解密小程序
这几天在看CTF相关的课程,涉及到古典密码学和近代密码学还有现代密码学。
简单替换密码
Atbash Cipher
埃特巴什码(Atbash Cipher)其实可以视为下面要介绍的简单替换密码的特例,它使用字母表中的最后 一个字母代表第一个字母,倒数第二个字母代表第二个字母。在罗马字母表中,它是这样出现的:
ABCDEFGHIJKLMNOPQRSTUVWXYZ 明码表
ZYXWVUTSRQPONMLKJIHGFEDCBA 密码表
比如埃 码
明文:the quick brown fox jumps over the lazy dog
密文:gsv jfrxp yildm ulc qfnkh levi gsv ozab wlt
按照上面的规则,我编了一个小工具。源码如下:
import tkinter as tk
from tkinter import messagebox
code_dict = {'A': 'Z', 'B': 'Y', 'C': 'X', 'D': 'W', 'E': 'V', 'F': 'U', 'G': 'T', 'H': 'S', 'I': 'R', 'J': 'Q', 'K': 'P', 'L': 'O', 'M': 'N', 'N': 'M', 'O': 'L', 'P': 'K', 'Q': 'J', 'R': 'I', 'S': 'H', 'T': 'G', 'U': 'F', 'V': 'E', 'W': 'D', 'X': 'C', 'Y': 'B', 'Z': 'A'}def encrypt(plaintext):ciphertext = ''for char in plaintext.upper():if char.isalpha():ciphertext += code_dict.get(char, '')else:ciphertext += charreturn ciphertextdef decrypt(ciphertext):plaintext = ''for char in ciphertext.upper():if char.isalpha():for k, v in code_dict.items():if char == v:plaintext += kelse:plaintext += charreturn plaintextclass CaesarCipherGUI:def __init__(self, master):self.master = mastermaster.title("埃特巴什码加解密--微信号强壮Python")# Create a frame to hold the input and output fieldsself.frame = tk.Frame(master)self.frame.pack(fill=tk.BOTH, expand=1)# Create the input fieldself.input_label = tk.Label(self.frame, text="输入信息", anchor='w', justify='left')self.input_label.pack()self.input_entry = tk.Entry(self.frame, width=40, justify='left')self.input_entry.pack()# Create the buttonsself.button_frame = tk.Frame(self.frame)self.button_frame.pack(fill=tk.X)self.encrypt_button = tk.Button(self.button_frame, text="加 密", command=self.encrypt_message)self.encrypt_button.pack(side='left', padx=5)self.decrypt_button = tk.Button(self.button_frame, text="解 密", command=self.decrypt_message)self.decrypt_button.pack(side='left', padx=25)# Create the output fieldself.output_label = tk.Label(self.frame, text="输 出", anchor='w')self.output_label.pack()self.output_text = tk.Text(self.frame, width=52, height=10, wrap='word')self.output_text.pack()def encrypt_message(self):plaintext = self.input_entry.get()ciphertext = encrypt(plaintext).lower()self.output_text.delete('1.0', tk.END)self.output_text.insert('1.0', ciphertext)def decrypt_message(self):ciphertext = self.input_entry.get()plaintext = decrypt(ciphertext).lower()self.output_text.delete('1.0', tk.END)self.output_text.insert('1.0', plaintext)root = tk.Tk()
my_gui = CaesarCipherGUI(root)
root.mainloop()
备注:界面是用AI生成,稍加修改。
运行结果如下图: