필터 지우기
필터 지우기

Image Steganography using LSB?

조회 수: 86 (최근 30일)
KARTHICK
KARTHICK 2013년 3월 3일
댓글: Image Analyst 2024년 4월 20일
I have coded a LSB algorithm for Image Steganography. During retrieval process i'm getting different msg. Can anyone correct this code please!
Embedding code
c = imread('image.bmp');
message = 'hellokarthick'
message = strtrim(message);
m = length(message) * 8;
AsciiCode = uint8(message);
binaryString = transpose(dec2bin(AsciiCode,8));
binaryString = binaryString(:);
N = length(binaryString);
b = zeros(N,1); %b is a vector of bits
for k = 1:N
if(binaryString(k) == '1')
b(k) = 1;
else
b(k) = 0;
end
end
s = c;
height = size(c,1);
width = size(c,2);
k = 1;
for i = 1 : height
for j = 1 : width
LSB = mod(double(c(i,j)), 2);
if (k>m || LSB == b(k))
s(i,j) = c(i,j);
else
if(LSB == 1)
s(i,j) = c(i,j) - 1;
else
s(i,j) = c(i,j) + 1;
end
k = k + 1;
end
end
end
imwrite(s, 'hiddenmsgimage.bmp');
Retriever coding
s = imread('hiddenmsgimage.bmp');
height = size(s,1);
width = size(s,2);
%For this example the max size is 100 bytes, or 800 bits, (bytes * = bits
m = 800;
k = 1;
for i = 1 : height
for j = 1 : width
if (k <= m)
b(k) = mod(double(s(i,j)),2);
k = k + 1;
end
end
end
binaryVector = b;
binValues = [ 128 64 32 16 8 4 2 1 ];
binaryVector = binaryVector(:);
if mod(length(binaryVector),8) ~= 0
error('Length of binary vector must be a multiple of 8.');
end
binMatrix = reshape(binaryVector,8,100);
display(binMatrix);
textString = char(binValues*binMatrix);
disp(textString);
  댓글 수: 16
Walter Roberson
Walter Roberson 2019년 4월 5일
getframe() takes a copy of whatever has been rendered into the frame, no matter what kind of graphics objects.
getimage() look specifically for image objects, such as created by image() or imagesc() or imshow() . Anything else that is part of the axes will be ignored.
Tommy Halim
Tommy Halim 2019년 4월 5일
Very helpful, thank you Walter Roberson

댓글을 달려면 로그인하십시오.

채택된 답변

Walter Roberson
Walter Roberson 2013년 3월 3일
  댓글 수: 3
faiz ul amin
faiz ul amin 2024년 4월 20일
dear walter roberson this is a code that i write for hiding data in 3d image.this code is not complete .i acces the points ,rgb intensity.now i hide the data in rgb intensity .i dont know how to complete code.
Image Analyst
Image Analyst 2024년 4월 20일
@faiz ul amin If you have any questions, then ask them in a new discussion thread (not here), and attach your data and code to read it in with the paperclip icon after you read this:

댓글을 달려면 로그인하십시오.

추가 답변 (11개)

Maged Rawash
Maged Rawash 2015년 4월 25일
it gives you different msg because you are using JPG and jpg using lossy mode to compress .. which change the pixel value and return different msg ..
you can use that code in imwrite();
imwrite(s,'img.jpg', 'Mode','lossless' );
% not all image application will read JPG lossless
so just work on PNG, TIFF it works with me ...
to retrieve the correct massage without guessing the char number of the massage ... just store the msg length in first pixel and get it in retrieving code like this ....
c = imread(image);
c(1:1:1)= length(msg) ; %to count massage Char to easly retrive all the massage
c=imresize(c,[size(c,1) size(c,2)],'nearest');
message = msg ; %add ' .' to prevint lossing one char
message = strtrim(message);
m = length(message) * 8;
AsciiCode = uint8(message);
binaryString = transpose(dec2bin(AsciiCode,8));
binaryString = binaryString(:);
N = length(binaryString);
b = zeros(N,1);
for k = 1:N
if(binaryString(k) == '1')
b(k) = 1;
else
b(k) = 0;
end
end
s = c;
height = size(c,1);
width = size(c,2);
k = 1;
for i = 1 : height
for j = 1 : width
LSB = mod(double(c(i,j)), 2);
if (k>m || LSB == b(k))
s(i,j) = c(i,j);
elseif(LSB == 1)
s(i,j) = (c(i,j) - 1);
elseif(LSB == 0)
s(i,j) = (c(i,j) + 1);
end
k = k + 1;
end
end
imgWTxt = 'msgimage.png';
imwrite(s,imgWTxt);
----------------------------------- Retriever coding
s = imread(image);
height = size(s,1);
width = size(s,2);
m = double( s(1:1:1) ) * 8 ;
k = 1;
for i = 1 : height
for j = 1 : width
if (k <= m)
b(k) = mod(double(s(i,j)),2);
k = k + 1;
end
end
end
binaryVector = b;
binValues = [ 128 64 32 16 8 4 2 1 ];
binaryVector = binaryVector(:);
if mod(length(binaryVector),8) ~= 0
error('Length of binary vector must be a multiple of 8.');
end
binMatrix = reshape(binaryVector,8,[]);
textString = char(binValues*binMatrix);
disp(textString);
thanks For the Code ...
  댓글 수: 5
Naveen Gunnam
Naveen Gunnam 2022년 3월 5일
편집: Naveen Gunnam 2022년 3월 5일
thank you so much dude ,
faiz ul amin
faiz ul amin 2024년 4월 20일
dear walter roberson i need some help.i need code for my project.
project title:data hiddng using 3d image as cover.) i want to hide data in 3d image.

댓글을 달려면 로그인하십시오.


supriya
supriya 2013년 3월 10일
편집: supriya 2013년 3월 10일
Actually wat i did is..made an array of the the positions of the pixels whose lsb wud be changed due to the encryption method and then did some changes in ur decryption method..see
c = imread('C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Sunset.jpg');
message = 'hellokarthick'
message = strtrim(message);
m = length(message) * 8;
AsciiCode = uint8(message);
binaryString = transpose(dec2bin(AsciiCode,8));
binaryString = binaryString(:);
N = length(binaryString);
b = zeros(N,1); %b is a vector of bits
for k = 1:N
if(binaryString(k) == '1')
b(k) = 1;
else
b(k) = 0;
end
end
s = c;
height = size(c,1);
width = size(c,2);
k = 1; Array=[];l=1;my=1;
for i = 1 : height
for j = 1 : width
LSB = mod(double(c(i,j)), 2);
if (k>m || LSB == b(k))
s(i,j) = c(i,j);
l=k+1;
else
if(LSB == 1)
s(i,j) = c(i,j) - 1;
else
s(i,j) = c(i,j) + 1;
Array(my)=l;
l=l+1;
my= my + 1;
end
k = k + 1;
end
end
end
imwrite(s, 'hiddenmsgimage.bmp');
Retriever code changes:
k = 1;my=1;ur=1;
for i = 1 : height
for j = 1 : width
if( k<=m )
if (my<numel(Array) && Array(my)==ur)
b(k)=~(mod(double(s(i,j)),2));
else
b(k) = mod(double(s(i,j)),2);
end
k = k + 1;
my= my + 1;
end
ur=ur+1;
end
end
  댓글 수: 9
Hammad RIaz
Hammad RIaz 2022년 5월 2일
where to put this code, I need the complete code please. So far Not even a single submitted code worked for me. Can any body provide a single working code along with cover/ sego images please.
Retriever code changes:
k = 1;my=1;ur=1;
for i = 1 : height
for j = 1 : width
if( k<=m )
if (my<numel(Array) && Array(my)==ur)
b(k)=~(mod(double(s(i,j)),2));
else
b(k) = mod(double(s(i,j)),2);
end
k = k + 1;
my= my + 1;
end
ur=ur+1;
end
end
Image Analyst
Image Analyst 2022년 5월 2일
@Hammad RIaz, here is a version to hide text:
and attached is a version for images, and for audio. I know they both work as-is. No guarantees after you start making any modifications of your own.
If you have trouble I suggest you start your own thread and post your code and data.

댓글을 달려면 로그인하십시오.


ARJUN K P
ARJUN K P 2015년 5월 16일
this code is not actally work correctly.. the extraction text is wrong...pls help me
the output is:
  댓글 수: 1
Image Analyst
Image Analyst 2015년 5월 16일
What's that garbage at the end? Don't paste all that stuff into the command window. Learn how to use a script.

댓글을 달려면 로그인하십시오.


Mariam Chatha
Mariam Chatha 2016년 9월 18일
how would the code change if we were doing MSB?
  댓글 수: 3
Shah
Shah 2017년 9월 17일
I need the MATLAB code for MSB hiding text in image stegnography
Image Analyst
Image Analyst 2017년 9월 18일
See my code for hiding in the LSB http://www.mathworks.com/matlabcentral/fileexchange/54155-encoding-text-into-image-gray-levels Of course if you hid it in the most significant bit, that would corrupt the image quite a bit. But nonetheless, you can use it to do that if you want.

댓글을 달려면 로그인하십시오.


Aishwarya Rajan
Aishwarya Rajan 2016년 11월 30일
Can anyone please explain how the LSB embedding part of the above code works?

Swati Nagpal
Swati Nagpal 2018년 7월 21일
Their is problem with the retrieval code it is showing different unexpected results. So if anyone got the correct result please do share the code. swatinagpal087@gmail.com

Muhammad Asfandyar Shahid
Muhammad Asfandyar Shahid 2018년 8월 9일
please someone send correct code of image stegnography i will be thankfull
  댓글 수: 5
Muhammad Asfandyar Shahid
Muhammad Asfandyar Shahid 2018년 8월 9일
ok correct my code and send it back.
Walter Roberson
Walter Roberson 2018년 8월 9일
"ok correct my code and send it back."
No. I posted the link that will get you to a list of over 300 steganography postings. Some of them have complete code, and others have discussions of how you would need to deal with situations such as yours. I have no reason to do your work.

댓글을 달려면 로그인하십시오.


Souradeep Mukhopadhyay
Souradeep Mukhopadhyay 2020년 7월 31일
편집: Walter Roberson 2021년 1월 19일
% Clear the existing workspace
clear all;
% Clear the command window
clc;
% Read the input image
input = imread('peppers.png');
% Convert image to greyscale
input=rgb2gray(input);
% Resize the image to required size
input=imresize(input, [512 512]);
% Message to be embedded
message='geeksforgeeks';
% Length of the message where each character is 8 bits
len = length(message) * 8;
% Get all the ASCII values of the characters of the message
ascii_value = uint8(message);
% Convert the decimal values to binary
bin_message = transpose(dec2bin(ascii_value, 8));
% Get all the binary digits in separate row
bin_message = bin_message(:);
% Length of the binary message
N = length(bin_message);
% Converting the char array to numeric array
bin_num_message=str2num(bin_message);
% Initialize output as input
output = input;
% Get height and width for traversing through the image
height = size(input, 1);
width = size(input, 2);
% Counter for number of embedded bits
embed_counter = 1;
% Traverse through the image
for i = 1 : height
for j = 1 : width
% If more bits are remaining to embed
if(embed_counter <= len)
% Finding the Least Significant Bit of the current pixel
LSB = mod(double(input(i, j)), 2);
% Find whether the bit is same or needs to change
temp = double(xor(LSB, bin_num_message(embed_counter)));
% Updating the output to input + temp
output(i, j) = input(i, j)+temp;
% Increment the embed counter
embed_counter = embed_counter+1;
end
end
end
% Write both the input and output images to local storage
% Mention the path to a folder here.
imwrite(input, 'path_to_folder\originalImage.png');
imwrite(output, 'path_to_folder\stegoImage.png');
  댓글 수: 2
Ishara Kariyawasam
Ishara Kariyawasam 2021년 1월 19일
How to decrypt these??
Walter Roberson
Walter Roberson 2021년 1월 19일
There is a legal distinction between steganography, which "hides" data, and "encryption". If you need to decrypt data then you need to have encrypted it... and we cannot talk about encryption here for legal reasons.

댓글을 달려면 로그인하십시오.


Hassan Vakani
Hassan Vakani 2021년 3월 15일
I know it is a quite late. First of all thank you for the code. Your logic doesn't have any problem. It is just the placement of the counter which is k=k+1. It should outside the outer if statement and it works.
for i = 1 : height
for j = 1 : width
LSB = mod(double(c(i,j)), 2);
if (k>m || LSB == b(k))
s(i,j) = c(i,j);
else
if(LSB == 1)
s(i,j) = c(i,j) - 1;
else
s(i,j) = c(i,j) + 1;
end
end
k = k + 1;
end
end
imwrite(s, 'hiddenmsgimage.bmp');
No need for adding the b(k) or anything else

PoXiao
PoXiao 2022년 3월 7일
Why did I run Retriever Coding and get garbled code instead of my original string, and how did I extract the original image and display it? I'm really at my wit's end
s = imread('C:\Users\hiddenmsgimage.png');
height = size(s,1);
width = size(s,2);
m = double( s(1:1:1) ) * 8 ;
k = 1;
for i = 1 : height
for j = 1 : width
if (k <= m)
b(k) = mod(double(s(i,j)),2);
k = k + 1;
end
end
end
binaryVector = b;
binValues = [ 128 64 32 16 8 4 2 1 ];
binaryVector = binaryVector(:);
if mod(length(binaryVector),8) ~= 0
error('Length of binary vector must be a multiple of 8.');
end
binMatrix = reshape(binaryVector,8,[]);
textString = char(binValues*binMatrix);
msgbox(textString, 'message');
% disp(textString);

Image Analyst
Image Analyst 2022년 3월 7일
See my attached demo.

카테고리

Help CenterFile Exchange에서 Encryption / Cryptography에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by