如何使用 Python 和 Base64 对消息进行编码和解码

开发
这个 GUI 应用程序既简单又方便,构建它将帮助您练习 Python 技能。

Python 的 Base64 模块是一个强大的消息编码和解码工具。您可以使用它通过 Internet 安全地发送数据。使用这种编码来保护敏感数据免受恶意黑客攻击是网站、应用程序和通信服务的标准程序。

Base64 模块有一对函数,可用于对消息进行编码和解码,从而为数据传输增加一些额外的安全性。

Tkinter 和 Base64 模块

Tkinter 允许您创建桌面应用程序。它提供了各种小部件,例如按钮、标签和文本框,可以轻松开发应用程序而无需付出太多努力。您可以使用 Tkinter 创建令人难以置信的 GUI 程序。您可以构建一个简单的计算器、一个待办事项列表应用程序或一个打字测试游戏。要将 Tkinter 安装到您的系统中,请打开您的终端并输入:

linuxmi@linuxmi /home/linuxmi/www.linuxmi.com                              
sudo apt install python3-tk

BASE64 提供了将二进制数据编码为 ASCII 并将其解码回二进制的功能。它支持标准和 URL 安全编码,使信息传输更加安全。要将字符串转换为 Base64 字符,请获取每个字符的 ASCII 值并计算其 8 位二进制。通过重新分组数字并将它们重新转换为各自的十进制值来转换这块 6 位。最后使用Base64编码表,得到每个小数的Base64值。

如何在 Python 中编码和解码消息

首先导入这两个模块。初始化 Tkinter 实例并显示根窗口。设置窗口的标题、尺寸(以像素为单位)和背景颜色。

from tkinter import *
import base64

root = Tk()
root.geometry('800x500')
root.configure(background='aqua')
root.title("使用 Python 对消息进行编码和解码")

使用标签小部件显示有关应用程序的有用信息。该标签接受您要放置它的父窗口、它应该显示的文本以及字体样式、颜色和背景颜色。在将小部件放入父小部件之前,使用 pack() 在布局块中组织小部件。StringVar 可以更轻松地控制标签或条目等小部件的值。

Label(root, text='Python消息编码器和解码器', font='arial 25 bold', fg='white', bg="purple").pack()
Text = StringVar()
key = StringVar()
mode = StringVar()
Result = StringVar()

定义一个函数 Encode(),它接受一个用于编码和解码的密钥以及消息。定义一个空列表并迭代到消息的长度。将 key 的索引设置为操作的模数,并将其值存储在变量 key_c 中。使用 ord() 获取字符的 Unicode 值,使用 chr() 获取表示指定值的字符。

将此值附加到列表中。使用空字符串连接列表的每个元素,并使用 encode() 方法返回字符串的 utf-8 编码版本。base64.urlsafe_b64encode ()方法对此输入进行编码,并将 – 替换为 + 并将 _ 替换为 /。

def Encode(key, message):
    enc = []

    for i in range(len(message)):
        key_c = key[i % len(key)]
        enc.append(chr((ord(message[i]) + ord(key_c)) % 256))

    return base64.urlsafe_b64encode("".join(enc).encode()).decode()

定义一个函数Decode(),它接受用于编码和解码的密钥以及消息。定义一个空列表并解码消息。迭代到消息的长度并将操作的模数设置为索引并将其值存储在key_c中。附加 Unicode 字符串消息解码的字符,如下所示。返回解码后的字符串。

定义一个函数Mode(),它获取用户在 Entry 小部件中输入的模式,并根据选择调用适当的函数。如果用户未输入有效响应,则显示一条错误消息:

def Mode():
    if (mode.get() == 'E'):
        Result.set(Encode(key.get(), Text.get()))
    elif (mode.get() == 'D'):
        Result.set(Decode(key.get(), Text.get()))
    else:
        Result.set('Invalid Mode')

定义一个函数Exit()来杀死和终止在后台运行的解释器。定义一个函数 Reset() 来清除 Entry 字段的内容:

def Exit():
    root.destroy()

def Reset():
    Text.set("")
    key.set("")
    mode.set("")
    Result.set("")

为消息、密钥、模式和文本定义标签和条目小部件。指定要放置它们的父窗口、字体样式、文本和背景颜色。还要设置坐标来组织它们。

Label(root, font='arial 17 bold', text='消息', fg='black', bg="aqua").place(x=60, y=100)
Entry(root, font='arial 15', textvariable=Text, bg='white').place(x=450, y=100)

Label(root, font='arial 17 bold', text='密钥', fg='black', bg="aqua").place(x=60, y=130)
Entry(root, font='arial 15', textvariable=key, bg='white').place(x=450, y=130)

Label(root, font='arial 17 bold', text='模式(E-Encode, D-Decode)', fg='black', bg="aqua").place(x=60, y=160)
Entry(root, font='arial 15', textvariable=mode, bg='white').place(x=450, y=160)

Label(root, font='arial 17 bold', text='文本', fg='black', bg="aqua").place(x=60, y=190)
Entry(root, font='arial 15 bold', textvariable=Result, bg='white').place(x=450, y=190)

Label(root, text='Linux迷 www.linuxmi.com', font='arial 25 bold', fg='white', bg="purple").pack()

同样,定义三个按钮来查看结果、重置字段和停止程序。这些按钮有一个名为 command 的特殊参数,它接受一个函数并在单击时执行它:

Button(root, font='arial 15 bold', text='结果', padx=2, bg='Light Gray', command=Mode).place(x=100, y=240)
Button(root, font='arial 15 bold', text='重置', width=6, command=Reset, bg='Green', padx=2).place(x=300, y=240)
Button(root, font='arial 15 bold', text='停止', width=6, command=Exit, bg='Red', padx=2, pady=2).place(x=500, y=240)

mainloop ()函数告诉 Python 运行 Tkinter 事件循环并监听事件(例如按钮按下),直到您关闭窗口:

root.mainloop()

消息编码器/解码器的实际应用

在运行程序时,程序会显示一个窗口,您必须在其中输入消息、密钥和模式。在使用 2009 密钥选择编码模式时,消息 www.linuxmi.com 变为 wqnCp8KpYcKewpnCoMKowqrCncKbYcKVwp_Cnw==。

类似地,在复制编码消息并将其粘贴回输入以进行解码时,您会得到原始消息。

使用 Python 检查网络安全

您可以使用 Python 编写脚本来自动执行安全检查、监控网络和扫描漏洞。您可以使用它来创建强大的应用程序,这些应用程序使用身份验证来降低攻击者破坏您的数据的机会。

网络安全专家经常使用 Python 构建 Web 应用程序防火墙来监控应用程序。他们可以使用机器学习执行威胁检测分析。使用此架构,创建自定义渗透测试和验证安全协议变得更加容易。

责任编辑:赵宁宁 来源: Linux迷
相关推荐

2014-02-20 10:28:28

JavaScriptBase64

2022-10-29 19:58:09

Base64Bashshell

2021-09-07 08:59:09

编码Base64解码

2024-02-28 23:07:42

GolangBase64编码

2021-03-05 09:10:19

base64编码

2023-11-07 08:35:26

2022-06-06 08:31:05

Base64编码Base58

2019-07-23 08:55:46

Base64编码底层

2010-03-03 16:14:05

Python base

2023-02-15 08:10:06

2021-02-05 05:26:33

字节ASCII控制

2016-12-13 13:50:06

JAVA转换Base64

2019-08-09 11:40:38

JavaScriptCSS技术

2021-11-25 08:11:47

JS网站信息

2013-01-24 09:29:16

2021-08-26 05:27:08

Base64 字节流算法

2016-10-13 13:12:43

微信小程序javascript

2023-01-26 00:31:25

ASCIIBase64UTF-8

2023-09-04 14:00:28

加密密钥私钥

2010-02-01 10:21:36

Python编码转换
点赞
收藏

51CTO技术栈公众号