埃特巴什码加解密小程序

这几天在看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生成,稍加修改。

运行结果如下图:

埃特巴什码加解密小程序_ide