برنامه نویسیپایتون

رمزنگاری با پایتون (Python)

رمزنگاری (Cryptography) چیست؟

رمزنگاری یکی از معروف ترین و پرطدفدار ترین زمینه های حوزه کامپیوتر و IT میباشد که امروزه پیشرفت بسیار زیادی کرده است. رمزنگاری علم و هنری میباشد که به سبب آن ما توانایی امن سازی فایل ها و داده های مختلف خودمان را پیدا خواهیم کرد. در این مقاله با مفهوم رمزنگاری با پایتون آشنا خواهید شد.

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

اگر بخواهیم به شکل واضح تری به این موضوع نگاه کنیم به این شکل است که فرض کنید 2 خانه داریم که فقط کلید یکی از خانه ها دست ما است.

خانه اول که خانه شما می باشد به راحتی میتوانید با کلیدی که در دست دارید وارد آن شوید. اما در چنین شرایطی آیا شما میتوانید با همان کلید وارد حریم خصوصی و خانه همسایه خود شوید؟

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

انواع رمزنگاری کدامند؟

فرآیند رمزنگاری به دو دسته مختلف تقسیم بندی می شود که به شرح زیر میباشد:

دسته اول Symmetric: دسته اول که متقارن یا همان Symmetric نام دارد به روشی از رمزنگاری گفته میشود که در آن برای فرآیند رمزنگاری از یک عدد کلید استفاده میشود و تمامی داده های رمزنگاری شده با آن کلید را میتوان با همان کلید رمزگشایی کرد از این رو این کلید نیز باید در بین افرادی که مجاز به کریپتوگرافی هستند قرار بگیرد.

به عنوان مثال برای این نوع الگوریتم ها میتوان به الگوریتم رمزنگاری DES و AES اشاره کرد.

رمزنگاری Symmetric
رمزنگاری با پایتون

دسته دوم Asymmetric: دسته دوم که نامتقارن یا همان Asymmetric نام دارد به روشی از کریپتوگرافی گفته میشود که در آن برای فرآیند کریپتوگرافی از دو جفت کلید تحت عنوان Public Key و Private Key استفاده میشود بدین شکل که داده های که با Public Key کریپتوگرافی شوند میتوان آنها را با Private Key کریپتوگرافی کرد و داده های که با Private Key رمزنگاری میشوند را میتوان با Public Key کریپتوگرافی کرد.‌

به عنوان مثال برای روش های رمزنگاری Asymmetric میتوان به الگوریتم RSA اشاره کرد.

رمزنگاری Asymmetric
رمزنگاری با پایتون

چگونه در پایتون فرآیند رمزنگاری داده هایمان را پیاده سازی کنیم؟!

در زبان برنامه نویسی قدرتمند Python یک Module بسیار قدرتمند در زمینه رمزنگاری وجود دارد که Cryptography نام دارد.

ما با استفاده از این Module توانایی ایجاد کلید و کریپتوگرافی داده هایمان(متن ها،عکس ها،فیلم ها،موسیقی ها و…) را داریم تا از دسترسی افراد غیرمجاز به آنها جلوگیری کنیم.

نحوه نصب ماژول Cryptography در Python

برای نصب این Module در Python به راحتی میتوانید از دستور زیر استفاده کنید.

pip3 install cryptography
ایجاد کلید به منظور رمزنگاری داده ها

به منظور ایجاد یک کلید برای فرآیند کریپتوگرافی داده های مختلفی که مورد نظرمان هستند میتوانیم به شکل زیر عمل کنیم:

from cryptography.fernet import Fernet

def generate_key():
    """
    Generates a key and save it into a file
    """
    key = Fernet.generate_key()
    print (key)
  • در کد بالا ابتدا از Cryptography تابع Fernet را در برنامه خود Import کردیم.
  • پس از آن یک تابع با نام key_generator ایجاد کردیم که کلید های موردنیازمان در برنامه را ایجاد می کند.
  • در ادامه یک متغیر Key یه منظور قرار گیری کلید ها در آن ایجاد کردیم.
  • در متغیر Key ما با استفاده از تابع Fernet یک کلید را ایجاد کردیم و پس از آن، آنرا در صفحه نمایش دادیم.

حال بیاید کدمان به نحوی دیگر بنویسیم و بگوییم که Key را در یک فایل با نام KaliBoys.key قرار بده؛ از این بابت کد ما به این شکل تغییر میکند:

from cryptography.fernet import Fernet

def generate_key():
    """
    Generates a key and save it into a file
    """
    key = Fernet.generate_key()
    with open("KaliBoys.key", "wb") as key_file:
        key_file.write(key)

نحوه رمزنگاری متن ها در Python از طریق Cryptography

حال که متوجه نحوه ایجاد کلید شدیم میبایست بررسی کنیم که چگونه میتوانیم متن های خودمان را به شکل رمزنگاری شده دربیاوریم؟! ابتدا میبایست کلید مورد نظرمان را در کدنویسی قرار دهیم(کلیدی که در فایل KaliBoys.key قرار دادیم).

def load_key():
    """
    Loads the key named `KaliBoys.key` from the current directory.
    """
    return open("KaliBoys.key", "rb").read()

پس از آن یک متغیر ایجاد میکنیم و متن مورد نظرمان را در آن قرار میدهیم و آنرا Encode میکنیم.

message = "message I want to encrypt".encode()

حال میبایست Fernet را به منظور انجام فرآیند رمزنگاری بر روی متن مورد نظرمان آماده سازی کنیم.

f = Fernet(key)

پس از آن از طریق متغیری که در بخش بالا ایجاد کردیم میتوانیم متن را رمزنگاری کنیم.

encrypted_message = f.encrypt(message)

کد کامل ما به این شکل میباشد:

from cryptography.fernet import Fernet

def generate_key():
    """
    Generates a key and save it into a file
    """
    key = Fernet.generate_key()
    with open("KaliBoys.key", "wb") as key_file:
        key_file.write(key)

def load_key():
    """
    Load the previously generated key
    """
    return open("KaliBoys.key", "rb").read()

def encrypt_message(message):
    """
    Encrypts a message
    """
    key = load_key()
    encoded_message = message.encode()
    f = Fernet(key)
    encrypted_message = f.encrypt(encoded_message)

    print(encrypted_message)

if __name__ == "__main__":
    encrypt_message("encrypt this message")

خروجی کد بالا:

b'gAAAAABesCUIAcM8M-_Ik_-I1-JD0AzLZU8A8-AJITYCp9Mc33JaHMnYmRedtwC8LLcYk9zpTqYSaDaqFUgfz-tcHZ2TQjAgKKnIWJ2ae9GDoea6tw8XeJ4='

در بالا میبینید که به راحتی توانستیم فرآیند کریپتوگرافی یک متن را انجام دهیم و خروجی رمزنگاری شده آنرا ببینیم.

چگونه داده هایمان رمزگشایی کنیم؟

فرآیند کریپتوگرافی داده هایمان نیز بسیار ساده می باشد فقط کافیست کد خود را به شکل زیر تغییر دهیم و از تابع Decrypt() استفاده نماییم:

from cryptography.fernet import Fernet

def load_key():
    """
    Load the previously generated key
    """
    return open("secret.key", "rb").read()

def decrypt_message(encrypted_message):
    """
    Decrypts an encrypted message
    """
    key = load_key()
    f = Fernet(key)
    decrypted_message = f.decrypt(encrypted_message)

    print(decrypted_message.decode())

if __name__ == "__main__":
    decrypt_message(b'gAAAAABesCUIAcM8M-_Ik_-I1-JD0AzLZU8A8-AJITYCp9Mc33JaHMnYmRedtwC8LLcYk9zpTqYSaDaqFUgfz-tcHZ2TQjAgKKnIWJ2ae9GDoea6tw8XeJ4=')

خروجی کد بالا:

encrypt this message

موفق باشید.

دانلود کتاب رمزنگاری با پایتون 2020

Implementing Cryptography Using Python

بیشتر بخوانید: استگانوگرافی یا پنهان نگاری چیست؟

امیرحسین تنگسیری نژاد

کارشناس مشاور و مدرس شبکه و امنیت شبکه, حوزه اصلی فعالیت بنده در زمینه شبکه مباحث R&S و Service Provider می‌باشد و در زمینه امنیت نیز در موقعیت های مختلفی مانند EndPoint Security, PenTest ,Forensic و SoC فعالیت داشته و دارم

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا