خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

نحوه رمزگذاری و رمزگشایی پیام ها با استفاده از Base64 و Python

این برنامه ساده رابط کاربری گرافیکی در دسترس است و ساخت آن به شما کمک می کند مهارت های پایتون خود را تمرین کنید.

ماژول Base64 پایتون یک ابزار قدرتمند برای رمزگذاری و رمزگشایی پیام ها است. می توانید از آن برای ارسال امن داده ها از طریق اینترنت استفاده کنید. استفاده از این نوع رمزگذاری برای محافظت از داده های حساس در برابر هکرهای متخاصم، رویه استانداردی برای وب سایت ها، برنامه ها و سرویس های ارتباطی است.

ماژول Base64 دارای یک جفت عملکرد است که می توانید از آنها برای رمزگذاری و رمزگشایی پیام ها استفاده کنید و امنیت بیشتری را به انتقال داده های شما اضافه می کند.

ماژول Tkinter و Base64

Tkinter به شما اجازه می دهد تا برنامه های دسکتاپ ایجاد کنید. ویجت‌های مختلفی مانند دکمه‌ها، برچسب‌ها و جعبه‌های متنی را ارائه می‌دهد که توسعه برنامه‌ها را بدون تلاش زیاد آسان می‌کند. شما می توانید برنامه های گرافیکی باورنکردنی با Tkinter ایجاد کنید. ممکن است یک ماشین حساب ساده، یک برنامه فهرست کارها یا یک بازی تست تایپ بسازید. برای نصب Tkinter در سیستم خود، ترمینال خود را باز کرده و تایپ کنید:

pip install tkinter

BASE64 توابعی را برای رمزگذاری داده های باینری به ASCII فراهم می کند و آنها را به باینری رمزگشایی می کند. از کدگذاری استاندارد و ایمن برای URL پشتیبانی می کند که انتقال اطلاعات را ایمن تر می کند. برای تبدیل یک رشته به کاراکتر Base64، مقدار ASCII هر کاراکتر را دریافت کرده و باینری 8 بیتی آن را محاسبه کنید. این تکه 6 بیتی را با گروه بندی مجدد ارقام و تبدیل مجدد آنها به مقادیر اعشاری مربوطه تبدیل کنید. در نهایت، از جدول رمزگذاری Base64 برای بدست آوردن مقادیر Base64 برای هر اعشار استفاده کنید.

نحوه رمزگذاری و رمزگشایی پیام ها در پایتون

کد منبع این پروژه را می توانید در آن بیابید
مخزن GitHub
.

با وارد کردن هر دو ماژول شروع کنید. نمونه Tkinter را راه اندازی کنید و پنجره ریشه را نمایش دهید. عنوان، ابعاد و رنگ پس‌زمینه پنجره را بر حسب پیکسل تنظیم کنید.

from tkinter import *
import base64

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

از ویجت های برچسب برای نمایش اطلاعات مفید در مورد برنامه استفاده کنید. برچسب یک پنجره والد را می پذیرد که می خواهید آن را در آن قرار دهید، متنی که باید نمایش داده شود و سبک قلم، رنگ و رنگ پس زمینه. از 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() برای بدست آوردن کاراکتری که نشان دهنده مقدار مشخص شده است استفاده کنید.

مطلب مرتبط:   نحوه استفاده از Enums در سی شارپ

این مقدار را به لیست اضافه کنید. به هر عنصر لیست با یک رشته خالی بپیوندید و از متد ()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 ذخیره کنید. کاراکتر رمزگشایی پیام رشته یونیکد را مطابق شکل زیر اضافه کنید. رشته رمزگشایی شده را برگردانید.

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() برای پاک کردن محتویات فیلد Entry تعریف کنید.

def Exit():
    root.destroy()

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

ویجت‌های برچسب و ورودی را برای پیام، کلید، حالت و متن تعریف کنید. پنجره والدی که می خواهید آنها را در آن قرار دهید، سبک فونت، متن و رنگ پس زمینه را مشخص کنید. همچنین مختصات را برای سازماندهی آنها تنظیم کنید.

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() به پایتون می گوید که حلقه رویداد Tkinter را اجرا کند و به رویدادها (مانند فشار دادن دکمه) گوش دهد تا زمانی که پنجره را ببندید.

root.mainloop()

رمزگذار پیام / رمزگشا در عمل

در اجرای برنامه، برنامه پنجره ای را نمایش می دهد که در آن باید پیام، کلید و حالت را وارد کنید. با انتخاب حالت Encoding با کلید 2009، پیام Make Use Of به f8KRwpvCnlLChcKjwp5Sf8KW تبدیل می شود.

مطلب مرتبط:   پایتون در مقابل جاوا: بهترین زبان برای سال 2022

خروجی پیام رمزگذاری پایتون

به طور مشابه، با کپی کردن پیام رمزگذاری شده و چسباندن آن به ورودی برای رمزگشایی با همان، پیام اصلی را دریافت می کنید.

خروجی پیام رمزگشایی پایتون

امنیت سایبری با استفاده از پایتون

می‌توانید از پایتون برای نوشتن اسکریپت‌هایی استفاده کنید که بررسی‌های امنیتی را خودکار می‌کنند، شبکه‌ها را نظارت می‌کنند و آسیب‌پذیری‌ها را اسکن می‌کنند. می‌توانید از آن برای ایجاد برنامه‌های کاربردی قوی استفاده کنید که از احراز هویت برای کاهش احتمال به خطر انداختن اطلاعات شما توسط مهاجم استفاده می‌کنند.

کارشناسان امنیت سایبری اغلب از پایتون برای ساختن فایروال برنامه های وب برای نظارت بر یک برنامه استفاده می کنند. آنها می توانند تجزیه و تحلیل تشخیص تهدید را با استفاده از یادگیری ماشین انجام دهند. با این معماری، ایجاد تست های نفوذ سفارشی و تایید پروتکل های امنیتی بسیار آسان تر است.