埃特巴什码加解密小程序
埃特巴什码加解密小程序
这几天在看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 += char return ciphertext def decrypt(ciphertext): plaintext = '' for char in ciphertext.upper(): if char.isalpha(): for k, v in code_dict.items(): if char == v: plaintext += k else: plaintext += char return plaintext class CaesarCipherGUI: def __init__(self, master): self.master = master master.title("埃特巴什码加解密--微信号强壮Python") # Create a frame to hold the input and output fields self.frame = tk.Frame(master) self.frame.pack(fill=tk.BOTH, expand=1) # Create the input field self.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 buttons self.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 field self.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生成,稍加修改。
运行结果如下图:
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。