رمزگذاری و رمزگشایی فایل ها با استفاده از پایتون
در این مقاله به نحوه رمزگذاری و رمزگشایی فایل ها با استفاده از پایتون می پردازیم. در دنیای امروز، امنیت اطلاعات یکی از بزرگترین نگرانیهای شرکتها است. برخی از اطلاعات را می توان با رمز عبور محافظت کرد (مانند ایمیل ها یا ورود به سیستم) در حالی که سایر اطلاعاتی که از طریق ایمیل یا FTP منتقل می شوند، در صورت محافظت با کلمات کلیدی، کارایی ندارند. اینجاست که رمزگذاری فایل نقش مهمی ایفا میکند و امنیت و راحتی مورد نیاز طرفهای درگیر در انتقال فایل را فراهم میکند.
پس رمزگذاری(encryption) چیست؟ رمزگذاری فرآیند تبدیل اطلاعات به نوعی کد برای پنهان کردن محتوای واقعی آن است. تنها راه دسترسی به اطلاعات فایل رمزگشایی(decryption) آن است. فرآیند رمزگذاری/رمزگشایی، رمزنگاری(cryptography) نامیده می شود.
بیایید ببینیم چگونه می توانیم فایل های خود را با استفاده از پایتون رمزگذاری و رمزگشایی کنیم. ما از رمزگذاری متقارن استفاده خواهیم کرد که به معنای استفاده از یک کلید برای رمزگذاری و رمزگشایی فایلها است.
برای دنبال کردن این آموزش به این کتابخانه پایتون نیاز داریم: cryptography. میتوانید با دستور زیر این کتابخانه را نصب کنید:
pip install cryptography
برای رمزگذاری از یک فایل txt با محتویات زیر استفاده خواهیم کرد:
Hello, My name is amir.
دوره پیشنهادی: دوره آموزش پایتون (python)
# ساخت یک کلید
در این مثال از معادله متقارن استفاده خواهیم کرد:
from cryptography.fernet import Fernet
Fernet یک رمزنگاری تأیید شده است که اجازه خواندن و/یا تغییر فایل را بدون «کلید» نمی دهد.
اکنون، بیایید کلید را ایجاد کرده و آن را در همان پوشه ای که فایل ما قرار دارد ذخیره کنیم:
key = Fernet.generate_key()
with open('mykey.key', 'wb') as mykey:
mykey.write(key)
اگر دایرکتوری که کد پایتون در آن قرار دارد را بررسی کنید، باید فایل mykey.key را ببینید. می توانید آن را با هر ویرایشگر متنی باز کنید. فایل باید شامل یک خط باشد که رشته ای از چند مرتبه کاراکتر است. برای من VlD8h2tEiJkQpKKnDNKnu8ya2fpIBMOo5oc7JKNasvk=
است.
مقاله پیشنهادی: ایجاد کردن کد QR در پایتون
# بارگذاری کلید
بعد از اینکه کلید رمزگذاری را تولید کردیم، باید آن را در محیط خود بارگذاری کنیم تا فایلها را رمزگذاری/رمزگشایی کنیم.
مرحله زیر بسیار ساده است و فقط باید فایل mykey.key را باز کرده و در حافظه محلی ذخیره کنید:
with open('mykey.key', 'rb') as mykey:
key = mykey.read()
print(key)
کد بالا را که اجرا کنید، مقدار کلید را به شما نشان میدهد. اکنون کلید رمزگذاری به عنوان متغیر key ذخیره شده است.
مقاله پیشنهادی: ترتیب عملگرها در پایتون
# رمزگذاری روی فایل با پایتون
اکنون که فایل و کلید را برای رمزگذاری در اختیار داریم، یک تابع را برای استفاده از آنها می نویسیم و فایل رمزگذاری شده را برمی گردانیم:
f = Fernet(key)
with open('grades.csv', 'rb') as original_file:
original = original_file.read()
encrypted = f.encrypt(original)
with open ('enc_grades.csv', 'wb') as encrypted_file:
encrypted_file.write(encrypted)
بایید کد بالا را مرور کنیم:
- ابتدا یک آبجکت از Fernet ساخته و کلید را به آن ارسال میکنیم.
- سپس اطلاعات را از فایل خوانده و در متغیر original ذخیره میکنیم.
- اطلاعات را با متد encrypt رمزگذاری کرده و در متغیر encrypted ذخیره میکنیم.
- در نهایت، اطلاعات رمزگذاری شده را در فایل جدیدی ذخیره میکنیم.
حالا اگر به فایل جدید نگاهی بیندازید، میبینید که اطلاعات آن به شکل رمزگذاری شده درآمده است:
gAAAAABfTnTFzZKgCSa9EvIvCuHvYlwlZQMm5K01nWoBbKrho_DP966Ct98NdZxBWvr04vQ2YZIU8i-She-gfVfqGsjGVF5zb-JeJQ0nxqSAEX6Z9LIyrH_2lSDoFS-JOwd5AWRFH1kro_CyAEmihXLZiCR8X2q0BnUjnVpeLz9RP_cqtzlEZSfRvSYshTfrPMutUphBsCLBPx_FygaD5kCmkcV0s1pt2x7oUiEi-R46AY-6JFGSCTVs-CvgrsLe_z7_q7hUoOC7NR6h5EjqU66CJCIQlxBFNg==
ویدیو پیشنهادی: ویدیو آموزش تابع len در پایتون
# رمزگشایی فایل با پایتون
پس از اینکه فایل را رمزگذاری کردید و به عنوان مثال، فایل را با موفقیت به مکان دیگری منتقل کردید، می خواهید به آن دسترسی داشته باشید. اکنون، آن داده ها در قالب رمزگذاری شده هستند. مرحله بعدی رمزگشایی آن به محتوای اصلی است.
روندی که اکنون دنبال خواهیم کرد، برعکس رمزگذاری در قسمت قبل است. دقیقاً همین روند، اما اکنون از فایل رمزگذاری شده به فایل رمزگشایی شده می رویم:
f = Fernet(key)
with open('enc_grades.csv', 'rb') as encrypted_file:
encrypted = encrypted_file.read()
decrypted = f.decrypt(encrypted)
with open('dec_grades.csv', 'wb') as decrypted_file:
decrypted_file.write(decrypted)
بایید کد بالا را مرور کنیم:
- ابتدا یک آبجکت از Fernet ساخته و کلید را به آن ارسال میکنیم.
- سپس اطلاعات رمزگذاری شده را خوانده و در متغیر encrypted ذخیره میکنیم.
- اطلاعات رمزگذاری شده را با متد decrypt رمزگشایی کرده و در متغیر decrypted ذخیره میکنیم.
- در نهایت، اطلاعات رمزگشایی شده را در فایل جدید ذخیره میکنیم.
حالا اگر به محتویات فایل دقت کنید، میبیند که به حالت اول برگشته است:
Hello, My name is amir.
عملیات رمزگذاری و رمزگشایی فایل با پایتون، موفقت آمیز بود.
ویدیو پیشنهادی: آموزش برنامهنویسی شی گرا(oop) در پایتون
# مثال شی گرایی کامل
در این بخش، تمام چیزی که برای رمزگذاری و رمزگشایی با پایتون نیاز داشتید را در قالب یک کد شی گرا برایتان آماده کردهام:
class Encryptor():
def key_create(self):
key = Fernet.generate_key()
return key
def key_write(self, key, key_name):
with open(key_name, 'wb') as mykey:
mykey.write(key)
def key_load(self, key_name):
with open(key_name, 'rb') as mykey:
key = mykey.read()
return key
def file_encrypt(self, key, original_file, encrypted_file):
f = Fernet(key)
with open(original_file, 'rb') as file:
original = file.read()
encrypted = f.encrypt(original)
with open (encrypted_file, 'wb') as file:
file.write(encrypted)
def file_decrypt(self, key, encrypted_file, decrypted_file):
f = Fernet(key)
with open(encrypted_file, 'rb') as file:
encrypted = file.read()
decrypted = f.decrypt(encrypted)
with open(decrypted_file, 'wb') as file:
file.write(decrypted)
برای استفاده از کد بالا میتوانید به شکل زیر کار کنید:
encryptor=Encryptor()
mykey=encryptor.key_create()
encryptor.key_write(mykey, 'mykey.key')
loaded_key=encryptor.key_load('mykey.key')
encryptor.file_encrypt(loaded_key, 'grades.csv', 'enc_grades.csv')
encryptor.file_decrypt(loaded_key, 'enc_grades.csv', 'dec_grades.csv')
# نتیجه گیری
این مقاله رمزگذاری و رمزگشایی فایل های متقارن را با استفاده از پایتون معرفی کرد. ما برخی از بخشهای کتابخانه cryptography
را مورد بحث قرار دادیم و همچنین یک نمونه فرآیند کامل ایجاد کردیم.