1.ステガノグラフィ
1。概要
ステガノグラフィは、別のドキュメントや画像に秘密情報を隠し、別の人がそれを抽出する手法です。元の画像の変更に気付かずに、画像内のテキストメッセージまたは画像を非表示にする方法を学習します。
2.プロセスの簡単な説明
(1)そのようなマトリックスがあります
(2)「de2bi」メソッドを使用してバイナリ形式に変換します
de2biメソッドは、デフォルトで正しいMSB順序になっています。
(3)「A」と「h」に対応する値はそれぞれ65と104です
65バイナリ表現
マトリックスのLSBビットの一部を置き換えます。
(4)同じ方法でh、104を処理します
(5)最終的な行列は次のようになります
2つのmatlabの例の非表示のテキストメッセージ
1.暗号化コード
暗号化される文字列は「この長さが小さい場合、これはmatlabデモです」であり、暗号化された画像はEncrypt1.pngとして保存されます。メッセージの長さは画像のサイズと一致し、短すぎたり長すぎたりしないことに注意してください。
%ENCRYPTION
clear all
%READ THE INPUT IMAGE
A = imread('图片/cameraman.tif');
%
Output = A;
%MESSAGE TO BE HIDDEN INSIDE THE IMAGE
Str = 'this is a matlab demo, if this lenght small';
%NUMBER OF CHARACTERS IN THE MESSAGE
numLetters = numel(Str);
%REPRESENT THE LENGTH OF THE MESSAGE IN BINARY FORMAT
Bi_Total = de2bi(numLetters,8);
Bi_Msg = de2bi(double(Str),8)';
Encrypt_msg = Bi_Msg(:)';
%FIND THE LENGTH OF THE MESSAGE IN THE BINARY FORMAT
num_En_msg = numel(Encrypt_msg);
%DEFINE THE INTERVAL BETWEEN EACH VALUE
dt=floor(numel(A)/num_En_msg);
%BINARY VALUE OF THE INTERVAL
Bi_dt = de2bi(dt,8);
% FIRST 8 BITS - INTERVAL
% SECOND 8 BITS - TOTAL LENGTH OF THE BINARY VALUES
Info_data = [Bi_dt,Bi_Total];
Output(1:16) = bitset(A(1:16),1,Info_data);
%REPLACE THE LEAST SIGNIFICANT BIT IN THE IMAGE
Start_pt =17;
End_pt = (num_En_msg*dt)+16;
Output(Start_pt:dt:End_pt) = bitset(A(Start_pt:dt:End_pt),1,Encrypt_msg);
figure,subplot(121),imshow(A);title('Original Image');
subplot(122),imshow(Output);title('Image with the hidden message');
%SHOW THE DIFFERENCE BETWEEN THE ORIGINAL AND THE ENCRYPTED IMAGE
figure,imagesc(double(A)-double(Output));colormap(jet);colorbar;
%WRITE THE ENCRYPTED IMAGE IN THE PNG FORMAT
imwrite(Output,'Encrypt1.png');
display('Message is hidden inside the image!');
メッセージは、バイナリ形式に変換し、画像ピクセルの最下位ビットに配置することにより、画像に隠されます。暗号化された画像は、ロスレス圧縮のために「PNG」画像ファイルとして保存されます。可逆圧縮技術では、ピクセル値は変更されないため、LSBに埋め込まれている情報が失われることはありません。
元の画像と暗号化された画像の最大絶対値の差は1です。画像のLSBビットのみを扱うためです。
隣接するピクセルを置き換える代わりに、シークレットメッセージのビットを特定のパターンまたは一定の間隔で配置できます。次の図は、これらのビットが特定の間隔値に配置されていることを示しています。
2.復号化コード
%DECRYPT THE MESSAGE
clear all
clc
%READ THE ENCRYPTED IMAGE
A = imread('Encrypt1.png');
%FIRST 8 BITS REPRESENT THE INTERVAL
Dt = bitget(A(1:8),1);
Dt = double(bi2de(Dt));
%LENGTH OF THE TEXT MESSAGE
Len = bitget(A(9:16),1);
Len = double(bi2de(Len));
%FETCH THE LEAST SIGNIFICANT BIT FROM THE ENCRYPTD IMAGE
Start_pt = 17;
End_pt = (Len*Dt*8)+16;
Decrypt_msg = bitget(A(Start_pt:Dt:End_pt),1);
%CONVERT THE IMAGE INTO DECIMAL
Decrypt_msg = reshape(Decrypt_msg,8,[])';
Dec_Char = bi2de(Decrypt_msg)';
display('Text Message inside the image:');
display(char(Dec_Char));
コードを実行すると、出力され、正常に復号化されます。
画像内のテキストメッセージ:
この長さが小さい場合、これはMATLABデモです
第三に、matlabの例は画像を非表示にします
1.写真の例
画像を非表示にするために使用される画像
非表示にする画像。非表示にする画像は、大きい画像の10%未満である必要があることに注意してください。
1.暗号化
参照コード
%ENCRYPTION
clear all
%READ THE COVER IMAGE
I = imread('123.png');
%READ THE IMAGE TO HIDE
J = imread('a12345.png');
%PREALLOCATE THE OUTPUT IMAGE
Output = zeros(size(I));
%REPRESENT THE NUMBER OF ROWS AND COLUMNS OF THE SECRET IMAGE
%IN BINARY FORMAT
Jsize = de2bi([size(J,1),size(J,2)]);
%RED,GREEN AND BLUE COMPONENTS OF THE SECRET IMAGE
Red_Ch = J(:,:,1);
Green_Ch = J(:,:,2);
Blue_Ch = J(:,:,3);
%CONVERT THE RED COMPONENT OF THE SECRET IMAGE INTO BINARY FORMAT
Encrypt_Red = de2bi(Red_Ch(:),8)';
Encrypt_Red = Encrypt_Red(:)';
%CONVERT THE GREEN COMPONENT OF THE SECRET IMAGE INTO BINARY FORMAT
Encrypt_Green = de2bi(Green_Ch(:),8)';
Encrypt_Green = Encrypt_Green(:)';
%CONVERT THE BLUE COMPONENT OF THE SECRET IMAGE INTO BINARY FORMAT
Encrypt_Blue = de2bi(Blue_Ch(:),8)';
Encrypt_Blue = Encrypt_Blue(:)';
%CALCULATE THE INTERVAL AND CONVERT IT INTO BINARY FORMAT
dt=floor((size(I,1)*size(I,2))/numel(Encrypt_Red));
Bi_dt = de2bi(dt,8);
Info_data = [Bi_dt,Jsize(1,:),Jsize(2,:)];
%RED,GREEN AND BLUE COMPONENT OF THE COVER IMAGE
Red_mat = I(:,:,1);
Green_mat = I(:,:,2);
Blue_mat = I(:,:,3);
% INTERVAL,NUMBER OF COLUMNS, NUMBER OF ROWS
Red_mat(1:24) = bitset(Red_mat(1:24),1,Info_data);
Green_mat(1:24) = bitset(Green_mat(1:24),1,Info_data);
Blue_mat(1:24) = bitset(Blue_mat(1:24),1,Info_data);
%%REPLACE THE LEAST SIGNIFICANT BIT OF THE COVER IMAGE
%WITH THE BINARY FORMAT OF THE SECRET IMAGE
EndValue = numel(Encrypt_Red)*dt+24;
Red_mat(25:dt:EndValue) = bitset(Red_mat(25:dt:EndValue),1,Encrypt_Red);
Green_mat(25:dt:EndValue) = bitset(Green_mat(25:dt:EndValue),1,Encrypt_Green);
Blue_mat(25:dt:EndValue) = bitset(Blue_mat(25:dt:EndValue),1,Encrypt_Blue);
%ENCRYPTED IMAGE
Output(:,:,1) = Red_mat;
Output(:,:,2) = Green_mat;
Output(:,:,3) = Blue_mat;
Output = uint8(Output);
figure,subplot(121),imshow(I); subplot(122),imshow(Output);
%DIFFERENCE BETWEEN THE ORIGINAL AND THE ENCRYPTED IMAGE
figure,imagesc(double(I)-double(Output));colormap(jet);colorbar;
%WRITE THE ENCRYPTED IMAGE IN THE PNG FORMAT
imwrite(Output,'Encrypt_Image2.png');
元の画像と暗号化された画像
全体像における隠された画像の分布。
2.復号化
%DECRYPT IMAGE
clear all
%READ THE ENCRYPTED IMAGE
A = imread('Encrypt_Image2.png');
%RED,GREEN AND BLUE COMPONENTS
Red_ch = A(:,:,1);
Green_ch = A(:,:,2);
Blue_ch = A(:,:,3);
%INTERVAL
Dt = bitget(Red_ch(1:8),1);
Dt = double(bi2de(Dt));
%NUMBER OF COLUMNS
Ncols = bitget(Red_ch(9:16),1);
Ncols = double(bi2de(Ncols));
%NUMBER OF ROWS
Nrows = bitget(Red_ch(17:24),1);
Nrows = double(bi2de(Nrows));
%FETCH THE LEAST SIGNIFICANT BIT FROM THE ENCRYPTED IMAGE
EndPoint = (Dt*Nrows*Ncols*8)+24;
Decrypt_Red = bitget(Red_ch(25:Dt:EndPoint),1);
Decrypt_Green = bitget(Green_ch(25:Dt:EndPoint),1);
Decrypt_Blue = bitget(Blue_ch(25:Dt:EndPoint),1);
Decrypt_Red = reshape(Decrypt_Red,8,[])';
Decrypt_Red = bi2de(Decrypt_Red);
Decrypt_Red = reshape(Decrypt_Red,Ncols,Nrows);
Decrypt_Green = reshape(Decrypt_Green,8,[])';
Decrypt_Green = bi2de(Decrypt_Green);
Decrypt_Green = reshape(Decrypt_Green,Ncols,Nrows);
Decrypt_Blue = reshape(Decrypt_Blue,8,[])';
Decrypt_Blue = bi2de(Decrypt_Blue);
Decrypt_Blue = reshape(Decrypt_Blue,Ncols,Nrows);
Decrypted_Image = zeros([Ncols,Nrows,3]);
Decrypted_Image(:,:,1)=Decrypt_Red;
Decrypted_Image(:,:,2)=Decrypt_Green;
Decrypted_Image(:,:,3)=Decrypt_Blue;
Decrypted_Image = uint8(Decrypted_Image);
imwrite(Decrypted_Image,'Decrypted_Image2.png');
figure,imshow(Decrypted_Image);title('Secret Image');
復号化された秘密の画像。