سنتحدث اليوم عن أستخدام لغه البايثون في علم Steganography وهو علم يختص بأخفاء ملف,رساله,صوره,فيديو بملف أخر  ,  والفرق بينه وبين التشفير هو أننا نلجأ لاخفاء المعلومات داخل شئ أخر عوضا عن تشفيرها.

وفي مقاله اليوم سنتحدث عن أخفاء نص في صوره بتكنيك بسيط أكتشفته بينما كنت أتعلم الـimage processing

وقبل أن نبدأ في شرح برمجه السكربت هناك متطلبات لابد من وجودها :

 

  • بايثون أصدار 2.7
  • مكتبه Opencv وتستطيع تحميلها من هنا وأختيار النظام الذي تستخدمه
  • مكتبه Numpy وتستطيع تحميلها من هنا
  • صوره 😀

والأن نتأكد من نزول المكتبات لديك بشكل سليم عن طريق الأمر :

والأن في مكتبه opencv أذا أردت قراءه صوره لتفعل بها ماتريده بعدها تقوم بتطبيق الأمر الأتي

حيث المتغير image يكون هو أسم الصوره ولو أردت عرضها أمامك تقوم بالتالي

في السطر الثاني قمت بعرض الصوره عن طريق imread ولكن لن تري شئ وبالتالي ستحتاج الي waitKey وهنا جعلناه ينتظر الضغط علي الحرف q لغلق الصوره عن طريق قيمه الـascii لحرف الـq

وهذه النتيجه علي جهازي

snip1

والأن لا داعي لذكر أي أساسيات أخري من أساسيات المكتبه ونبدأ في الأهم

كل صوره مما تراه أمامك علي الشاشه تتكون من (Pixels) وكتعريف سريع فا البكسل هو أصغر نقطه في الصوره أو هو الجزء الأصغر من الصوره القابل للتحكم وهو لا يري بالعين المجرده

كل صوره تراها تتكون من مئات بل وألاف البكسلز وكل بكسل منهم يحمل لون مما يكون الصوره واللون لكي يتكون يكون خليط من ثلاث ألوان وهو الأحمر والأخضر والأزرق وهذا يسمي بنظام الـRGB 

والأن كيف نستفيد من هذا لتخزين المعلومات ؟

كل لون من الألوان الثلاثه يستطيع أن يحمل قيمه عدديه من 0-255 ولكن أولا هل سمعت عن ascii ؟

الأسكي هو نظام يستبدل كل رمز برقم وهو يستخدم في التواصل ما بين الأجهزه ويمتد مدي أعداد الـascii من 0 الي 255 مقسمه الي ثلاث مجموعات أهمها المجموعه الثانيه وهي مجموعه الحروف القابله للكتابه وهي في المدي 32-127

والأن بعد أن لاحظت أن مدى أعداد الأسكي هو نفس المدى التي تستطيع أن تتحمله ألوان الـRGB وأن البكسل لا يري بالعين المجرده أذن لم لا نقوم بتغيير قيم ألوان بكسلز محدده بقيم الأسكي الخاص بالحروف 😀
ولمعلوماتك الصوره لن تتلف والقيم لن تتغير لأنك قمت بتغيير قيمه لون لا أكثر 😀 والأن لنبدأ العمل علي ذلك

لتعدل ألوان بكسل ما يجب أن تحدد مكانه ولعمل هذا يكون عن طريق تحديد العامود والصف الذي يوجد البكسل بتقاطعهما فمثلا أن أردنا فعلا هذا في البايثون يكون كالأتي

كما ترى فعند تحديد مكان البكسل تقوم بايثون بطباعه قيمه ألوان الـRGB الخاصه به الثلاثه ولو أردنا قيمه لون واحد منهم نقوم بالتالي

او نستطيع القيام بالتالي

والأن أذا أردنا تعديل قيمه لون ما خاص ببكسل

كما ترى أصبحت قيمه اللون 120 والأن لنطبق هذا علي الحروف ولنأخذ كلمه isecurity كا مثال

الأن وضعنا كلمه isecurity بداخل الصوره فهذه الصوره الأصليه

test

وهذه بعد وضع الكلمه

test

كما ترى لا فرق 😀

الأن لنقوم بأستخراج الكلمه من الصوره مجددا نحن بحاجه لمعرفه طول الكلمه ولذلك عند أستخدام هذا السكربت في أرسال رسائل سريه أحرص علي أرسال طول الرساله أيضا مع الصوره للمستلم

الأن لنكتب كود أستخراج الرساله

كما تري أستخرجنا الرساله من الصوره سليمه 😀

والأن نكتب دالة (function) لأخفاء الصور وأخري لأستخراج الرساله من الصور لتصبح العمليه أسهل ووضعها في سكربت

والأن أنهينا, السكربت والفكره التي أعتمدنا عليها بسيطه للغايه فهنالك سكربتات أخري تعمل بطرق أكثر تعقيدا فمثلا الأن أردنا تطوير الفكره ونخفي الرساله في فيديو فماذا نفعل ؟

ولكن أولا مما يتكون الفيديو ؟

يتكون الفيديو من عده فريمز (Frames) تتحدث بصوره مستمره في زمن قليل فلا تُرى العين المجرده تبدل الفريمز ودعني الأن أخبرك بمعلومه قيمه وهي أنه يمكن في مكتبه Opencv معالجه كل فريم وكأنه صوره 😀 أظن أنك فهمت الأن إلي ماذا أشير 😀

الأن بسرعه لنقوم بفتح ملف فيديو نقوم بالأتي

والأن لنعدل الفريم بسرعه نقوم بتعديل بعمل فانشكن جديده تشبه hide ولكن للفريمز

وحتي لا أطيل المقاله أكثر ستقوم بنفس ما فعلت مع الصور مع فرق أنك تتعامل مع فيديو والأن لكي يقوم أحد بأستخراج الرساله يجب أن يعرف طول الرساله ورقم الفريم الموجوده فيه

أرجو أن تكونوا قد استفدتم من هذه المقالة، لا تترددوا في ترك أسئلتكم و إستفساراتكم إذا ما كان هناك جزئية غير واضحه .

مقالات اخرى عن Steganography :

مقال : علم Steganography ” ما لا تستطيع عيناك رؤيته”

مقال : تعريف بالـ Steganography