文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-11-30 17:50

关注

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迷内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯