الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

بدأه حسين احمد طالب في 21 أبريل 2013 · 2 رد · 7,202 مشاهدة · في الرياضيات والخوارزميات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بكل طرق التشفير يبقى هناك نص للبيانات عندما تعترض من قبل العدو يشكك في كونها رسالة مشفرة ويحاول ان يفكها بكل طرق التشفير فمثلا طرق تشفير التي نعرفها مشهورة حاليا يعرفها الجميع ومثلما نستطيع ان نشفر نص بها  يستطيع العدو ان يحاول فك النص بها .حتى طرق تشفير جديدة التي نحن نبنيها لا يعرفها غيرنا يبقى العدو يحاول فكها. الذي نريده نحن ان معترض الرسالة (العدو) لا يشك اصلا بوجود رسالة مشفرة لأننا سنخفيها داخل صورة فلا يفكر اصلا بوجود نص مشفر او نخفيها بصورة بين 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 image
x=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 image
text='hi';
ascm=double(text);
binasc=dec2bin(ascm);
[rt, ct]=size(binasc);

 


 

enc4.png

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

 

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

 

enc5.png

 

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









 

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

 

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

 

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

 

 

 

Matlab Code 2d gray image
subplot(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 image
ascimessage=bin2dec(reshape(textbin ,rt,ct ) );

 

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

 

 

 

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

 

 

aaa.png 

 

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

 

Matlab Code 2d gray image
clc
 clear
x=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 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 ));
% 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 rgb
clc
 clear
x=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

------------------

حسين الربيعي

 

مهندس برامجيات من العراق

 

ادرس  في  RIT  في الولايات المتحدة

 

مدونتي

http://hussienahmmed.blogspot.com/

 

قناة اليوتيوب الخاصة بلدورات

https://www.youtube.com/user/alxs1aa

#2

السلام عليكم
شكرا أخي على الموضوع و لكن طريقتك "بدائية"، أقترح مراجعة وشم الصور و التضمين المطال

#3

 شكرا جزيلا لك على الجهد الرائع

مواضيع مشابهة