-
يكشنبه, ۳ فروردين ۱۳۹۹، ۰۷:۰۷ ق.ظ
-
۱۸۱۳
نوشتن اسکریپت مخفی کننده ی اطلاعات در فایل های تصویری PNG در پایتون
درود به همه !
خب امروز یه اسکریپت توپ پایتونی داریم .
میخوایم اسکریپتی بنویسیم که یه سری اطلاعات متنی رو برای ما مخفی کنه داخل یه فایل تصویری PNG و همچنین اگر خواستیم برامون اطلاعات مخفی شده پشت عکس را استخراج کند .
برای مخفی کردن اطلاعات پشت عکس در پایتون از کتابخانه ی stepic استفاده میکنیم .
جهت نصب این کتابخانه در لینوکس :
MrPython@debian:~$ pip3 install stepic
حهت نصب این کتابخانه در ویندوز :
C:\> pip install stepic
پس از نصب کردن کتابخانه ی مورد نیاز میریم تا یه توضیحی در مورد استفاده از این کتابخانه بدیم .
ساده ترین روش مخفی کردن اطلاعات در پشت عکس PNG در این کتابخانه به صورت زیر است :
import stepic from PIL import Image
file = "picture.png" text = "my data"
img = Image.open(file) img_stegano = stepic.encode(img,text.encode())
img_stegano.save("newpic.png")
خب همونطور که میبینید در خط اول کتابخانه ی stepic رو وارد برنامه کردیم . در خط بعد Image را از کتابخانه ی PIL وارد برنامه کردیم تا بتوانیم فایل های تصویری را باز کنیم .
متغییر file حاوی مسیر فایل PNG است که قصد مخفی کردن اطلاعات در آن را داریم.
متغییر text حاوی متنی است که میخواهیم در فایل PNG مخفی کنیم.
سپس با ()Image.open ابتدا تصویری که در متغییر file هست را باز کردیم و ریختیم داخل متغییر img
سپس یک متغییر دیگر به نام img_stegano ایجاد کردیم که از کتابخانه ی stepic استفاده کردیم و در ورودی اول خود عکسی که در خط قبل باز کردیم را به او دادیم و به عنوان ورودی دوم متنی که داخل text نوشته بودیم رو به صورت بایت (انکود شده) دادیم .
نهایتا فایل PNG جدید ساخته شده و اطلاعات پشت آن مخفی شده حالا باید فایل را ذخیره کنیم . خط آخر همینکار رو کردیم از تابع save برای ذخیره سازی استفاده کردیم و نام فایل جدید را به عنوان ورودی در پرانتز نوشتیم .
خب این روش مخفی سازی اطلاعات درون عکس بود که ما اطلاعاتمون رو داخل عکسی به نام newpic.png ذخیره کردیم.
حالا ببینیم چطوری میشه با استفاده از کتابخانه ی stepic همین اطلاعاتی که در فایل newpic.png ذخیره کردیم در عکس را استخراج کنیم .
برای اینکار به صورت زیر عمل میکنیم :
import stepic from PIL import Image
file = "newpic.png"
img = Image.open(file) decoded = stepic.decode(img)
print("Text Is : "+decoded)
همونطور که میبینید طبق سورس قبل در ابتدا کتابخانه های مورد نیاز را وارد کردیم .
متغییری به نام file تعریف کردیم که حاوی آدرس فایل عکسی است که میخواهیم اطلاعات را از آن استخراج کنیم .
سپس با استفاده از Image.open فایل عکس که مسیر آن داخل file بود را باز کردیم و ریختیم داخل متغییر img .
از stepic.decode برای استخراج اطلاعات پشت عکس استفاده کردیم که در پرانتز به عنوان ورودی متغییر img که حاوی عکسی است که باز کردیم را داده ایم و نهایتا اطلاعاتی که استخراج میشود را ریختیم داخل متغییر decoded .
و در نهایت متغییر decoded که حاوی اطلاعات استخراج شده از عکس هست رو چاپ کردیم .
اینم از روش مخفی سازی و استخراج اطلاعات از عکس PNG در پایتون .
فقط اینکه این روش رو روی فایل های JPG نمیتونید انجام بدید .
حالا میخوایم یه سورس کامل بنویسیم . یعنی یه برنامه بنویسیم که خودش برامون عمل مخفی سازی و استخراج رو انجام بده :
import stepic from PIL import Image def encode(file): # This Function Will Put data on picture img = Image.open(file) text = input("Text : ") img_stegano = stepic.encode(img,text.encode()) name = input("Output Name : ") img_stegano.save(name) def decode(file): # This Function Will get data from picture img = Image.open(file) decoded = stepic.decode(img) return decoded file = input("Image File : ")
print("1 - Encode") print("2 - Decode") mode = input(">> ") if mode == "1": encode(file) elif mode == "2": text = decode(file) print("Decoded Text : ") print("\t"+text) else: print("Command Not Found !")