• 0
حسين احمد طالب

إخفاء نص داخل صورة (Hide Text in Image By Matlab)

سؤال

بكل طرق التشفير يبقى هناك نص للبيانات عندما تعترض من قبل العدو يشكك في كونها رسالة مشفرة ويحاول ان يفكها بكل طرق التشفير فمثلا طرق تشفير التي نعرفها مشهورة حاليا يعرفها الجميع ومثلما نستطيع ان نشفر نص بها  يستطيع العدو ان يحاول فك النص بها .حتى طرق تشفير جديدة التي نحن نبنيها لا يعرفها غيرنا يبقى العدو يحاول فكها. الذي نريده نحن ان معترض الرسالة (العدو) لا يشك اصلا بوجود رسالة مشفرة لأننا سنخفيها داخل صورة فلا يفكر اصلا بوجود نص مشفر او نخفيها بصورة بين 100 صورة مرسلة فيصعب على المعترض إيجادها ومن ثم فكها.

هناك طرق عديدة لإخفاء نص داخل صورة معينة وأفضلها وضع النص في LSB لكل Gray Scale حيث يمثل هذا البت رقم واحد فقط مثلا اذا كان في Gray Scale معين رقم زوجي يكون LSB صفر واذا فردي يكون واحد أي إننا اذا غيرنا هذا البت بواسطة اخفاء بيانات في داخله  أي تغير في قيمته لا يؤثر على الصورة كثيرا فهو يغير الأضائه بمقدار واحد فقط من اصل 255 أي لا يسبب بأثر واضح يجعل الشخص يشك بوجود نص مشفر داخل الصورة أي مثلا لو كان Gray Scale لموقع معين (161) لو خزنا  في LSB له قيمة (0 ) يصبح  Gray Scaleلهذا الموقع يساوي 160 ولو خزنا فيه (1) يبقى (161 )

 

enc1.png

خطوات الإخفاء على صورة عادية gray

1.    نقرئ الصورة  الملونة وثم نحولها الى عادية وبعدها نجد ابعاد المصفوفة وتساعدنا ابعاد المصفوفة على اعادة الصورة الى شكلها الاصلي بعد خزن النص في داخلها

 

Matlab Code 2d gray imagex=imread('C:\Users\Public\Pictures\Sample Pictures\Penguins.jpg');imageDCE=rgb2gray(x); [r c]=size( imageDCE);

 

enc2.png

 

 

 

2.    نحول الصورة الى النظام الثنائي(Binary)  حتى نستطيع ان نغير البت الثامن الايمن LSB

 

 

Matlab Code 2d gray imageimageBIN=dec2bin( imageDCE); 

 

 

enc3.png
 

3.    ندخل النص المرد إخفائه ونحوله الى AScii Code ومنه الى النظام الثنائي ونجد عدد الصفوف وعدد الأعمدة له حتى نستطيع ان ننقل بايتات كل حرف الى داخل البتLSB في الصورة حيث كل بايت من بايتات الحرف سيخزن في البنت الثامن الأيسر لموقع معين في الصورة

 

 

Matlab Code 2d gray imagetext='hi';ascm=double(text);binasc=dec2bin(ascm);[rt, ct]=size(binasc);

 


 

enc4.png

4.    ألان نخزن كل بت من البتات السبعة من  كل حرف داخل صف من صفوف الصورة في العمود الثامن الذي يمثل LSB ثم ننتقل للبت المقابل في الكلمة الثانية ونستمر حتى اخر حرف ثم نرجع لثاني بت بأول كلمة ثم ثاني بت بثاني كلمة ونستمر. أي كلما ازداد حجم النص ازدادت صعوبة فك شفرة شاهد الصورة  لا يعرف المعترض ماهي بنات الصورة وما هي بتات النص

 

Matlab Code 2d gray imagefor i=1:1:rt*ct imageBIN(i,8) =binasc(i);   end

 

enc5.png

 

بواسطة i نحدد من أي موقع داخل الصورة نبدأ بعملية الإخفاء









 

5.    ألان أخفينا النص داخل الصورة ألان نحول الصورة من النظام الثنائي الى النظام العشري ونعيد ابعاد المصفوفة الى أبعادها الاولية باستخدام داخلة reshape  ونشاهد ان الصورة تحولت بصيغية رقم واحد نستخدم دالة   uint8 لنعيدها الى صيغة رقم عشري بثمانية بت

 

Matlab Code 2d gray imageENCimageDCE=uint8(reshape(bin2dec(imageBIN),r,c ));

 

6.    نقوم برسم الصورة قبل وبعد خزن النص في داخلها

 

 

 

Matlab Code 2d gray imagesubplot(1,2,1) imshow(imageDCE) subplot(1,2,2) imshow(ENCimageDCE)

 



 

enc6.png

 

اعادة النص المشفر من الصورة

1.    نحول الصورة الى صيغة النظام الثنائي

 

Matlab Code 2d gray image  decriptext=dec2bin(ENCimageDCE);

 

2.    ناخذ البت الثامن من كل صف ونخزنه في مصفوفة جديدة ونلاحظ انه يجب ان يرسل لنا صاحب الرسالة المشفرة عدد صفوف وعدد اعمدة النص المشفر ومن اين يبدأ التشفير داخل الصورة حتى نستطيع أخراجه

 

Matlab Code 2d gray image textbin=decriptext(1:rt*ct,8);

 

3.    نعيد تحجيم المصفوفة النص الى شكلها الأولي بصيغة النظام الثنائي ونحولها من النظام الثنائي الى النظام العشري

 

Matlab Code 2d gray imageascimessage=bin2dec(reshape(textbin ,rt,ct ) );

 

4.    نحول البيانات من العشري الى الحروف ونضع علامة (‘) لكي تعرض بشكل صفوف

 

 

 

Matlab Code 2d gray image messageDEc= char(ascimessage)' 

 

 

aaa.png 

 

كود برنامج الإخفاء وإعادة النصوص كامل لصورة عادية

 

Matlab Code 2d gray imageclc clearx=imread('C:\Users\Public\Pictures\Sample Pictures\Penguins.jpg');text='bad friend maked you bad';ascm=double(text);binasc=dec2bin(ascm);[rt, ct]=size(binasc);%we use 2D image tospeed op. imageDCE=rgb2gray(x); %we use one line to relase line of code %imageDCE=imageDCE(1:4,1:4); %saved old shap it convert to one line [r c]=size( imageDCE); % convert image to binaryimageBIN=dec2bin( imageDCE); % cover it to one col 8bit and  row=r*c% imageBIN(:,8)=0; % put zero in all LSB in image for i=1:1:rt*ct imageBIN(i,8) =binasc(i);   end %imageBIN(:,8)=binasc(1:end) % UINT8 Convert to unsigned 8-bit integer. becuse it convert to one bit ENCimageDCE=uint8(reshape(bin2dec(imageBIN),r,c ));% ENCimageDCE(1:rt*ct)=0; to show area of hide subplot(1,2,1) imshow(imageDCE) subplot(1,2,2) imshow(ENCimageDCE)% figure %imageBIN(1:rt*ct,:)=0; % ENCimageDCE=uint8(reshape(bin2dec(imageBIN),r,c )); %imshow(ENCimageDCE) % to sure of encrption binasc(1:8),imageBIN(1:8,8) show that who image is % encripted decriptext=dec2bin(ENCimageDCE); textbin=decriptext(1:rt*ct,8); ascimessage=bin2dec(reshape(textbin ,rt,ct ) ); messageDEc= char(ascimessage)' 

 

كود برنامج الإخفاء وإعادة النصوص كامل لصورة  ملونة

 

 

Matlab Code 3d rgbclc clearx=imread('C:\Users\Public\Pictures\Sample Pictures\Penguins.jpg');text='hi';ascm=double(text);binasc=dec2bin(ascm);[rt, ct]=size(binasc);%we use 2D image tospeed op. %imageDCE=rgb2gray(x); %we use one line to relase line of code// show who image effect by text% imageDCE=imageDCE(1:4,1:4); %saved old shap it convert to one line %[r c]=size( imageDCE);  %if we use 3D image--------------   [r c f]=size( x);   imageBIN=dec2bin( x);   %------------------------ % convert image to binary%imageBIN=dec2bin( imageDCE); % cover it to one col 8bit and  row=r*c% imageBIN(:,8)=0; % put zero in all LSB in image for i=1:1:rt*ct imageBIN(i,8) =binasc(i);   end %imageBIN(:,8)=binasc(1:end) % UINT8 Convert to unsigned 8-bit integer. becuse it convert to one bit ENCimageDCE=uint8(reshape(bin2dec(imageBIN),r,c,f )); subplot(1,2,1) imshow(x) subplot(1,2,2) imshow(ENCimageDCE)% figure %imageBIN(1:rt*ct,:)=0; % ENCimageDCE=uint8(reshape(bin2dec(imageBIN),r,c )); %imshow(ENCimageDCE) % to sure of encrption binasc(1:8),imageBIN(1:8,8) show that who image is % encripted decriptext=dec2bin(ENCimageDCE); textbin=decriptext(1:rt*ct,8); ascimessage=bin2dec(reshape(textbin ,rt,ct ) ); messageDEc= char(ascimessage)' 

 

 


تحميل المقالة من هنا 

 

http://hussienahmmed.blogspot.com/2013/03/hide-text-in-image-by-matlab.html

 

 

4

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

2 إجابة على هذا السؤال .

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .