Как кодировать и декодировать сообщения с помощью Base64 и Python

21
технологии 21.webp

Последнее обновление 26.02.2023 — Василий Иванов

Такие читатели, как вы, помогают поддерживать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию. Читать далее.

Модуль Python Base64 — это мощный инструмент для кодирования и декодирования сообщений. Вы можете использовать его для безопасной отправки данных через Интернет. Это стандартная процедура для веб-сайтов, приложений и коммуникационных служб, использующая этот тип кодирования для защиты конфиденциальных данных от враждебных хакеров.

Модуль Base64 имеет пару функций, которые вы можете использовать для кодирования и декодирования сообщений, добавляя дополнительную безопасность при передаче данных.

Модуль Tkinter и Base64

Tkinter позволяет создавать настольные приложения. Он предлагает множество виджетов, таких как кнопки, метки и текстовые поля, которые упрощают разработку приложений без особых усилий. Вы можете создавать невероятные программы с графическим интерфейсом с помощью Tkinter. Вы можете создать простой калькулятор, приложение для списка дел или тестовую игру. Чтобы установить Tkinter в вашу систему, откройте терминал и введите:

 pip install tkinter 

BASE64 предоставляет функции для кодирования двоичных данных в ASCII, декодирующие их обратно в двоичные. Он поддерживает как стандартное, так и URL-безопасное кодирование, что делает передачу информации более безопасной. Чтобы преобразовать строку в символ Base64, получите значение ASCII каждого символа и вычислите его 8-битный двоичный код. Преобразуйте этот фрагмент из 6 бит, перегруппировав цифры и преобразовав их в соответствующие десятичные значения. Наконец, используйте таблицу кодирования Base64, чтобы получить значения Base64 для каждого десятичного числа.

По теме:  Обзор Belkin BoostCharge Pro 2-в-1: компактная зарядка устройств Apple обходится дорого

Как кодировать и декодировать сообщения в Python

Вы можете найти исходный код этого проекта в его репозитории GitHub.

Начните с импорта обоих модулей. Инициализируйте экземпляр Tkinter и отобразите корневое окно. Установите заголовок, размеры в пикселях и цвет фона окна.

 from tkinter import *
import base64

root = Tk()
root.geometry('750x400')
root.configure(background='aqua')
root.title("Encode and Decode Messages Using Python")

Используйте виджеты Label для отображения полезной информации о приложении. Метка принимает родительское окно, в которое вы хотите ее поместить, текст, который она должна отображать, а также стиль шрифта, цвет и цвет фона. Используйте pack() для организации виджета в блоке макета перед его размещением в родительском виджете. StringVar упрощает управление значением виджета, такого как Label или Entry.

 Label(root, text='Python Message Encoder and Decoder', font='arial 25 bold', fg='white', bg="purple").pack()
Text = StringVar()
key = StringVar()
mode = StringVar()
Result = StringVar()

Определите функцию Encode(), которая принимает ключ для кодирования и декодирования вместе с сообщением. Определите пустой список и повторите до длины сообщения. Установите индекс ключа как модуль операции и сохраните его значение в переменной 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, как показано ниже. Вернуть декодированную строку.

 def Decode(key, message):
    dec = []
    message = base64.urlsafe_b64decode(message).decode()

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

    return "".join(dec)

Определите функцию 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() для очистки содержимого поля ввода.

 def Exit():
    root.destroy()

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

Определите виджеты Label и Entry для сообщения, ключа, режима и текста. Укажите родительское окно, в которое вы хотите их поместить, стиль шрифта, текст и цвет фона. Также установите координаты для их организации.

 Label(root, font='arial 17 bold', text='Message', 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='Key', 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='Mode(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='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)

Точно так же определите три кнопки для просмотра результата, сброса полей и остановки программы. Кнопки имеют специальный параметр, называемый командой, который принимает функцию и выполняет ее по щелчку.

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

Функция mainloop() указывает Python запустить цикл событий Tkinter и прослушивать события (например, нажатия кнопок) до тех пор, пока вы не закроете окно.

 root.mainloop() 

Кодировщик/декодер сообщений в действии

При запуске программы программа отображает окно, в котором вы должны ввести сообщение, ключ и режим. При выборе режима кодирования с ключом 2009 сообщение Make Use Of превращается в f8KRwpvCnlLChcKjwp5Sf8KW.

Точно так же, копируя закодированное сообщение и вставляя его обратно на вход для декодирования с тем же самым, вы получаете исходное сообщение обратно.

Кибербезопасность с использованием Python

Вы можете использовать Python для написания сценариев, которые автоматизируют проверки безопасности, мониторинг сетей и поиск уязвимостей. Вы можете использовать его для создания надежных приложений, которые используют аутентификацию, чтобы снизить вероятность того, что злоумышленник скомпрометирует ваши данные.

Эксперты по кибербезопасности часто используют Python для создания брандмауэров веб-приложений для мониторинга приложения. Они могут выполнять анализ обнаружения угроз с помощью машинного обучения. Благодаря этой архитектуре гораздо проще создавать собственные тесты на проникновение и проверять протоколы безопасности.