【圖像加密】圖像加密解密含Matlab源碼
1 簡(jiǎn)介
為保護(hù)圖像信息在通信的傳輸過程中不被未授權(quán)的人員輕易的獲取.圖像加密解密技術(shù)應(yīng)運(yùn)而生,并得到長(zhǎng)足發(fā)展.文章根據(jù)對(duì)常用的圖像加密技術(shù)的探索,設(shè)計(jì)并實(shí)現(xiàn)基于混沌理論,像素級(jí)別打亂和隱寫術(shù)的圖像加密算法.利用MATLAB軟件對(duì)圖像像素打亂后,與生成的混沌序列按位異或得到加密圖像,最后再將加密圖像隱寫入載體圖像中從而完成最后的加密操作.這樣操作后,增加破解者的破解難度,同時(shí)也讓圖像在傳輸過程中不易引起攻擊者的警覺.
2 部分代碼
%%
clc
clear all
close all
tic
addpath subFunctions
% Data=imread('images\cameraman.tif');
% Data=imread('images\rice.tif');
Data=imread('images\Lena.jpg');
% Data=imread('images\football.jpg');
% Data=imread('images\onion.png');
% Data=imread('images\ORLFace.jpg');
[row,col,dim]=size(Data);
if (dim>1)
? ?Data=rgb2gray(Data); %如果輸入圖像是彩色圖像,則轉(zhuǎn)換為灰度
end
%% 縮放和轉(zhuǎn)換為二進(jìn)制
% 縮放以將圖像轉(zhuǎn)換為 8 像素?cái)?shù)組;每個(gè)像素為 8 位
% 因此 8 像素將等于 64 位數(shù)據(jù)
[Data,padding]=Scalling(Data,8);
Data_binary=convert2bin(Data);
%% 鍵選擇和擴(kuò)展
% 以133457799bbcdff1的形式輸入key
hex_key = '133457799bbcdff1';
[bin_key] = Hex2Bin( hex_key );
[K1,K2,K3,K4,K5]=SF_Key_Gen(bin_key);
%% 加密與解密
orignal_msg=[];
encrypt_msg=[];
decrypt_msg=[];
for i=1:size(Data_binary,1)
? ?orignal=Data_binary(i,:);
? ?tic
? ?[cipher]=SF_Encrypt(orignal,K1,K2,K3,K4,K5);
? ?encryption_time(i)=toc;
? ?[plaintext]=SF_Decryption(cipher,K1,K2,K3,K4,K5);
? ?encrypt_msg(:,i)=Binary2Dec(cipher);
? ?decrypt_msg(:,i)=Binary2Dec(plaintext);
end
if (padding~=0)
? ?Data=reshape(Data,[size(Data,1)*size(Data,2) 1]);
? ?Data=Data(1:end-padding);
? ?encrypt_msg=reshape(encrypt_msg,[size(encrypt_msg,1)*size(encrypt_msg,2) 1]);
? ?encrypt_msg=encrypt_msg(1:end-padding);
? ?decrypt_msg=reshape(decrypt_msg,[size(decrypt_msg,1)*size(decrypt_msg,2) 1]);
? ?decrypt_msg=decrypt_msg(1:end-padding);
end
%% 將向量轉(zhuǎn)換為圖像
Orignal=uint8(reshape(Data,[row,col]));
Encrypted=uint8(reshape(encrypt_msg,[row,col]));
Decrypted=uint8(reshape(decrypt_msg,[row,col]));
figure
subplot(1,3,1)
imshow(Orignal)
title('原始圖像')
subplot(1,3,2)
imshow(Encrypted)
title('加密圖像')
subplot(1,3,3)
imshow(Decrypted)
title('解密圖像')
figure
subplot(2,1,1)
imhist(Orignal);
subplot(2,1,2)
imhist(Encrypted);
display('Done');
toc
%% 計(jì)算加密和原始圖像熵
Y=(imhist(Encrypted)+0.00001)/(row*col);
Y=-sum(Y.*log2(Y));
X=(imhist(Orignal)+0.00001)/(row*col);
X=-sum(X.*log2(X));
% ?disp(['原始信息熵:X,' '加密信息熵:Y' ]);
Re=[X Y]
3 仿真結(jié)果


4 參考文獻(xiàn)
[1]張英偉. 基于matlab的數(shù)字圖像des加密解密研究[J]. 信息技術(shù)與信息化, 2014(5):2.
博主簡(jiǎn)介:擅長(zhǎng)智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)、信號(hào)處理、元胞自動(dòng)機(jī)、圖像處理、路徑規(guī)劃、無人機(jī)等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問題可私信交流。
部分理論引用網(wǎng)絡(luò)文獻(xiàn),若有侵權(quán)聯(lián)系博主刪除。
