ساخت ابزار رمزنگاری CLI با پایتون

ساخت ابزار رمزنگاری CLI با پایتون

در دنیای امروز، امنیت اطلاعات از اهمیت بالایی برخوردار است. رمزنگاری به عنوان یکی از مهم‌ترین ابزارهای حفظ امنیت، نقش کلیدی در محافظت از داده‌ها ایفا می‌کند. پایتون، با کتابخانه‌های قدرتمند و سهولت استفاده، یک انتخاب عالی برای پیاده‌سازی الگوریتم‌های رمزنگاری و ساخت ابزارهای مرتبط است. این مقاله به آموزش ساخت یک ابزار رمزنگاری خط فرمان (CLI) با استفاده از پایتون می‌پردازد. این ابزار قابلیت رمزنگاری و رمزگشایی فایل‌ها را با استفاده از الگوریتم AES (Advanced Encryption Standard) فراهم می‌کند.

پیش‌نیازها

برای دنبال کردن این آموزش، به موارد زیر نیاز دارید:

  • پایتون 3.x
  • آشنایی با مفاهیم پایه‌ای برنامه‌نویسی پایتون
  • آشنایی با خط فرمان (Terminal/Command Prompt)

مقدمه‌ای بر رمزنگاری AES

AES یک الگوریتم رمزنگاری متقارن است که به طور گسترده‌ای مورد استفاده قرار می‌گیرد. در رمزنگاری متقارن، از یک کلید واحد برای رمزنگاری و رمزگشایی داده‌ها استفاده می‌شود. AES از کلیدهای 128، 192 یا 256 بیتی پشتیبانی می‌کند. هرچه طول کلید بیشتر باشد، امنیت الگوریتم نیز بالاتر خواهد بود. AES به دلیل سرعت و امنیت بالا، به عنوان استاندارد رمزنگاری در بسیاری از برنامه‌ها و پروتکل‌ها مورد استفاده قرار می‌گیرد.

طراحی ابزار CLI

ابزار CLI ما باید قابلیت‌های زیر را داشته باشد:

  • رمزنگاری یک فایل با استفاده از کلید مشخص شده
  • رمزگشایی یک فایل با استفاده از کلید مشخص شده
  • دریافت نام فایل ورودی و خروجی از کاربر
  • دریافت کلید رمزنگاری از کاربر
  • نمایش پیام‌های مناسب به کاربر در صورت موفقیت یا بروز خطا

پیاده‌سازی با پایتون

برای پیاده‌سازی این ابزار، از کتابخانه cryptography استفاده خواهیم کرد. این کتابخانه مجموعه‌ای از الگوریتم‌های رمزنگاری و ابزارهای مرتبط را فراهم می‌کند. ابتدا باید این کتابخانه را نصب کنید:

pip install cryptography

کد پایتون زیر، پیاده‌سازی ابزار CLI را نشان می‌دهد:

import argparse
from cryptography.fernet import Fernet
import os

def generate_key():
    """تولید کلید رمزنگاری جدید."""
    key = Fernet.generate_key()
    with open("secret.key", "wb") as key_file:
        key_file.write(key)

def load_key():
    """بارگیری کلید رمزنگاری از فایل."""
    if os.path.exists("secret.key"):
        with open("secret.key", "rb") as key_file:
            key = key_file.read()
        return key
    else:
        return None

def encrypt_file(input_file, output_file, key):
    """رمزنگاری یک فایل."""
    f = Fernet(key)
    with open(input_file, "rb") as file:
        file_data = file.read()
    encrypted_data = f.encrypt(file_data)
    with open(output_file, "wb") as file:
        file.write(encrypted_data)

def decrypt_file(input_file, output_file, key):
    """رمزگشایی یک فایل."""
    f = Fernet(key)
    with open(input_file, "rb") as file:
        encrypted_data = file.read()
    try:
        decrypted_data = f.decrypt(encrypted_data)
        with open(output_file, "wb") as file:
            file.write(decrypted_data)
    except Exception as e:
        print("خطا در رمزگشایی فایل: کلید نامعتبر یا فایل خراب است.")
        print(e)
        return False
    return True

def main():
    """تابع اصلی برنامه."""
    parser = argparse.ArgumentParser(description="ابزار رمزنگاری فایل با استفاده از AES.")
    parser.add_argument("action", choices=["encrypt", "decrypt"], help="عملیات مورد نظر (encrypt یا decrypt).")
    parser.add_argument("input_file", help="نام فایل ورودی.")
    parser.add_argument("output_file", help="نام فایل خروجی.")
    parser.add_argument("--key", help="کلید رمزنگاری (در صورت عدم ارائه، کلید جدید تولید می‌شود).")

    args = parser.parse_args()

    if args.action == "encrypt":
        if args.key:
            key = args.key.encode()
        else:
            key = load_key()
            if not key:
                generate_key()
                key = load_key()
        encrypt_file(args.input_file, args.output_file, key)
        print(f"فایل '{args.input_file}' با موفقیت رمزنگاری شد و در '{args.output_file}' ذخیره شد.")

    elif args.action == "decrypt":
        if args.key:
            key = args.key.encode()
        else:
            key = load_key()
            if not key:
                print("کلید رمزنگاری یافت نشد. برای رمزگشایی باید کلید را ارائه دهید.")
                return
        if decrypt_file(args.input_file, args.output_file, key):
            print(f"فایل '{args.input_file}' با موفقیت رمزگشایی شد و در '{args.output_file}' ذخیره شد.")

if __name__ == "__main__":
    main()

توضیح کد

کد بالا شامل توابع زیر است:

  • generate_key(): یک کلید رمزنگاری جدید تولید می‌کند و آن را در فایل secret.key ذخیره می‌کند.
  • load_key(): کلید رمزنگاری را از فایل secret.key بارگیری می‌کند.
  • encrypt_file(): یک فایل را با استفاده از کلید مشخص شده رمزنگاری می‌کند.
  • decrypt_file(): یک فایل را با استفاده از کلید مشخص شده رمزگشایی می‌کند.
  • main(): تابع اصلی برنامه است که آرگومان‌های خط فرمان را پردازش می‌کند و عملیات رمزنگاری یا رمزگشایی را انجام می‌دهد.

در تابع main()، از ماژول argparse برای پردازش آرگومان‌های خط فرمان استفاده می‌شود. این ماژول به ما امکان می‌دهد تا آرگومان‌های مورد نیاز را تعریف کنیم و نحوه استفاده از ابزار را به کاربر نشان دهیم. برنامه ابتدا بررسی می‌کند که آیا کلید رمزنگاری ارائه شده است یا خیر. اگر کلید ارائه نشده باشد، سعی می‌کند آن را از فایل secret.key بارگیری کند. اگر کلید در فایل وجود نداشته باشد، یک کلید جدید تولید می‌کند و آن را در فایل ذخیره می‌کند. سپس، بسته به عملیات مورد نظر (رمزنگاری یا رمزگشایی)، تابع مربوطه را فراخوانی می‌کند.

نحوه استفاده از ابزار

برای استفاده از این ابزار، مراحل زیر را دنبال کنید:

  1. ابتدا، فایل پایتون را ذخیره کنید (مثلاً با نام encrypt_tool.py).
  2. سپس، خط فرمان را باز کنید و به دایرکتوری‌ای که فایل را در آن ذخیره کرده‌اید بروید.
  3. برای رمزنگاری یک فایل، از دستور زیر استفاده کنید:
  4. python encrypt_tool.py encrypt input.txt output.enc
    
  5. برای رمزگشایی یک فایل، از دستور زیر استفاده کنید:
  6. python encrypt_tool.py decrypt output.enc input.txt
    
  7. برای ارائه کلید رمزنگاری به صورت دستی، از آپشن --key استفاده کنید:
  8. python encrypt_tool.py encrypt input.txt output.enc --key "your_secret_key"
    

نکات امنیتی

در هنگام استفاده از این ابزار، نکات امنیتی زیر را در نظر داشته باشید:

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

نتیجه‌گیری

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

بدون دیدگاه

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

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