نوشتن اسکریپت مخفی کننده ی اطلاعات در فایل های تصویری PNG در پایتون :: Mr Python | مستر پایتون

نوشتن اسکریپت مخفی کننده ی اطلاعات در فایل های تصویری PNG در پایتون

  • ۱۶۹۲

نوشتن اسکریپت مخفی کننده ی اطلاعات در فایل های تصویری 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 !")

 

 

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

    پاسخ:
    سلام . 
    ببینید فایل تصویری مثل png رو نمیشه اجرایی کرد .
  • سلام عکسی که ذخبره کردیم در کجا ذخیره میشه؟

     

    پاسخ:
    سلام . در کنار اسکریپت
  • در فانکشن decode متغییر file رو در آخر تعریف کردید که باعث ایجاد خطا در استفاده از این فانکشن میشه.

     

    کارتون عالیه و پست هاتون رو دنبال میکنم

    پاسخ:
    درود بر شما . دقت کنید یه قسمتی از کد هست که برای متغییر file یک input گرفتیم . اون قسمت داخل تابع decode نیست بلکه خارج این تابع تعریف شده و همچنین قبل از فراخوانی تابع decode نیز متغییر file تعریف شده . بنابراین مشکلی پیش نخواهد آمد . منظور شما همین قسمت بود ؟

    ممنون ازتون خداروشکر که مفید بودن پست ها :)
  • سلام میشه یه اموزشی بزارین باهاش فایلrarرو توی عکس پنهان کنیم؟

    پاسخ:
    درود . 
    در پست های آینده احتمالا منتشر خواهیم کرد .
  • سلام

    دیکود خرابه کار نمیکنه

    پاسخ:
    سلام دیکودر تست شده و سالم بوده .
    اگر اروری گرفتید لطفا ارور رو برای ما ارسال کنید . :)
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی