اسکریپت آموزشی رمزنگاری و رمزگشایی کردن فایل ها در پایتون با استفاده از کتابخونه ی PyCrypto که در مباحث رمزنگاری میتونه کمکمون کنه
با استفاده از کدهایی که تو این پست قرار میدم
میتونین مسیر یه فایل مثل آهنگ و ... ( هر چیزی ) به برنامه بدین و بعدش یه پسوورد بهش بدین تا آخرش با استفاده از اون پسوورد ، فایلتون رو رمزنگاری کنه و بعدش اگه خواستین میتونین فایل اصلی رو پاکش کنین و هر موقع خواستین مجددا از طریق همون فایل که دیگه غیر قابل باز کردن هستش ، برش گردونین تا کسی نتونه تو بعضی از اطلاعات شما که دوست ندارین سرک بکشه
این پست رو بعد از سه ماه کار کردن روی رمزنگاری تو پایتون بالاخره آماده کردم که فکر نکنم اصلا تو سایت های ایرانی در مورد رمزنگاری تو پایتون صحبت شده باشه ، مگر اینکه کتاب های آموزشی خارجی گذاشته باشن
قبلا هم توی این پست در مورد رمزنگاری متن تو پایتون صحبت کرده بودیم
در نتیجه از این کدها در راهی که من فکرشو میکنم استفاده کنین
چون با یه خرده تغییر و اضافه کردن تقریبا 30 خط کد دیگه
میشه یه چیز تو مایه های باج افزار درست کرد که تمامی اطلاعات رو رمزنگاری میکنه
البته من میخواستم سورس باج افزار با پایتون رو قرار بدم و برای اینکه یه خرده با مباحث شیرین رمزنگاری تو پایتون آشنا بشین ، خط به خط اونو براتون تحلیل کنم
اما نشد دیگه ... اینجا ایرانه ( اگه نبود برای پیشرفت اعضا هم که شده بود قطعا این کارو میکردم )
خب دیگه ...
بعد از کلی چرت و پرت پروندن خودمونی
میریم سراغ لپ کلوم
اول باید کتابخونه ی PyCrypto رو نصب کنیم که اگه نصبش کنین ، میبینین آخرش ارور میده که من دقیقا دلیل اصلیشو بعد از سه ماه نفهمیدم
اما در کل به جای نوشتن اسم کتابخونه ، باید از اسم پایین استفاده کنیم تا کتابخونه درست و کامل نصب بشه
pip install pycryptodome
بعد از اینکه کامل نصب شد ، یه اسکریپت پایتون ایجاد کنین و کدهای پایین رو داخلش قرار بدین
import os
from Crypto.Cipher import AES
from Crypto.Hash import SHA256
from Crypto import Random
def encrypt(key, filename):
chunksize = 64 * 1024
outputFile = "(ENC)" + filename
filesize = str(os.path.getsize(filename)).zfill(16)
IV = Random.new().read(16)
encryptor = AES.new(key, AES.MODE_CBC, IV)
with open(filename, 'rb') as infile:
with open(outputFile, 'wb') as outfile:
outfile.write(filesize.encode('utf-8'))
outfile.write(IV)
#http://virus32.blog.ir
while True:
chunk = infile.read(chunksize)
if len(chunk) == 0:
break
elif len(chunk) % 16 != 0:
chunk += b' ' * (16 - (len(chunk) % 16))
outfile.write(encryptor.encrypt(chunk))
def decrypt(key, filename):
chunksize = 64 * 1024
outputFile = filename[11:]
with open(filename, 'rb') as infile:
filesize = int(infile.read(16))
IV = infile.read(16)
decryptor = AES.new(key, AES.MODE_CBC, IV)
with open(outputFile, 'wb') as outfile:
while True:
chunk = infile.read(chunksize)
if len(chunk) == 0:
break
outfile.write(decryptor.decrypt(chunk))
outfile.truncate(filesize)
#http://virus32.blog.ir
def getKey(password):
hasher = SHA256.new(password.encode('utf-8'))
return hasher.digest()
def Main():
choice = raw_input("Would you like to (E)ncrypt or (D)ecrypt?: ")
if choice == 'E' or choice == 'e':
filename = raw_input("File to encrypt: ")
password = raw_input("Password: ")
encrypt(getKey(password), filename)
print("Done.")
elif choice == 'D' or choice == 'd':
filename = raw_input("File to decrypt: ")
password = raw_input("Password: ")
decrypt(getKey(password), filename)
print("Done.")
else:
print("No Option selected, closing...")
if __name__ == '__main__':
Main()
خب حالا اسکریپت رو اجرا کنین
اول از ما میپرسه که میخواین فایلی رو رمزنگاری کنین یا اینکه رمزگشایی کنید که اگه بخواین فایلی رو رمزنگاری کنین ، حرف E یا e رو از روی کیبورد بزنین و بعدش Enter کنین ، بعدا ازتون یه مسیر میخواد که شما هم باید مسیر برنامه رو بدین و بعد از اینتر کردن ، پسووردتونو بهش بدین تا براتون رمزنگاری کنه و اگه فایلتون کنار اسکریپته که دیگه نیازی نیست مسیر بدین و اگه فقط اسم فایل رو هم بدین و اینتر کنین هم کافیه
حالا فایل اصلی رو پاک کنین و برگردین به اسکریپت و مجددا اونو اجرا کنین ، حالا به جای E از حرف D استفاده کنین و بعد از اینتر کردن ، طبق روال قبلی پیش برین تا بفهمین قضیه چیه ...
ضمنا بعد از اینکه فایلتونو رمزنگاری کردین ، قبل از اینکه بخواین اونو حذفش کنین ، اول از همه بازش کنین و ببینین که به چه شکله یا اینکه چه اتفاقی میفته و ...
به امید بهتر شدن وضعیت کشورمون 👌❤️