رمزنگاری و رمزگشایی متقارن در Python

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

ما در این مطلب ساخت کلیدها، ذخیره کلیدهای ساخته شده و نحوه رمزنگاری با آن ها را بررسی می کنم.

 

نصب کتابخانه cryptography

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

برای نصب کتابخانه cryptography دستور زیر را اجرا کنید:

برای اطمینان از نصب صحیح این کتابخانه دستور زیر را در IDLE اجرا کنید:

اگر خطایی به وجود نیامد، پس کتابخانه به طور کامل و صحیح نصب شده است.

رمزنگاری متقارن چیست؟

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

برای استفاده از رمزنگاری متقارن ما از کلاس Fernet استفاده می کنید که یک پیاده سازی از AES است.

به دست آوردن یک کلید رمز متقارن

دو راه کلی برای به دست آوردن یک کلید وجود دارد، یا یک کلید جدید می سازید یا یک کلید قبلی را می خوانید و بارگذاری می کنید.

بیایید ساخت یک کلید تازه را با همدیگه ببینیم. برای ساخت یک کلید تصادفی متد generate_key را از کلاس Fernet صدا می زنیم.

متغیر key حالا یک کلید را داخل خود دارد. هنگام کار با این کلیدهای تولید شده دقت کنید آنها را از دست ندهید، چرا که با از دست کلید قادر به رمزگشایی نخواهید بود.

ذخیره کلید

یک راه برای ذخیره امن کلیدهای ساخته شده، ذخیره آنها در فایل باینری است. برای این کار ما به صورت ساده می توانیم یک فایل بسازیم و مقدار متغیر را درون آن بنویسیم:

 

خواندن و بارگذاری کلید

اگر از قبل یک کلید را ذخیره کرده باشید، می توانید طبق مثال زیر آن را بازیابی کنید:

 

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

اگر می خواهید بر پایه یک رشته رمز عبور کلید خود را تولید کنید، باید طبق کد زیر پیش بروید:

در کد بالا، متغیر key مقدار کلید که بر حسب رشته “password” و رشته افزودنی ‘salt_’ ساخته شده را در داخل خود نگهداری می کند.

به شما قویاً پیشنهاد می کنیم، که رشته افزودنی بالا را تغییر دهید و یک رشته افزودنی ساده انتخاب نکنید.

رمزگذاری اطلاعات

برای رمزگذاری یک رشته شما ابتدا به یک کلید نیاز دارید که نحوه ساخت یا بارگذاری آن را بالاتر نشان دادیم. پس از گرفتن کلید، باید رشته خود را به صورت byte به متد encrypt بدهید (از شئ ساخته شده با کلید مذکور) تا مقدار رمزنگاری شده آن را دریافت کنید. به کد زیر دقت کنید:

متغیر encrypted حالا مقدار رمز شده از رشته “my deep dark secret” را در درون خود دارد.

 

رمزگشایی اطلاعات

برای رمزگشایی ابتدا با استفاده از همان کلید یک شئ از کلاس Fernet بسازید و سپس متد decrypt را به کار ببرید. به نمونه کد زیر دقت کنید

 

نمایش یک نمونه رمزنگاری و رمزگشایی

برای نمایش این موارد در عمل، به کد زیر دقت کنید. در کد زیر ابتدا کلید تولید شده و سپس با آن کلید رمزنگاری و رمزگشایی شده و در نهایت برابری رشته اصلی با رشته رمزگشایی شده بررسی شده است.

 

رمزنگاری و رمزگشایی فایل ها

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

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

پس از عملیات رمزنگاری، می توانیم فایل اصلی را پاک کنیم.

 

برای رمزگشایی فایل هم می توانیم به صورت زیر عمل کنیم:

 

نکته مهم برای رمزنگاری و رمزگشایی فایل ها با کلاس Fernet این است که، این کتابخانه برای رمزنگاری داده ای مناسب است که به راحتی درون حافظه اصلی سیستم (RAM) جای می گیرد و بیش از حد بزرگ نیست. اگر فایل بزرگی دارید، باید راه حلی اتخاذ کنید که داده فایل را به بخش های کوچکتر تقسیم کنید.

 

منبع : Encryption and Decryption in Python

 

نظرتان را برای ما بنویسید

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