《混沌對映與位元重組的影像加密》(平萍等)一文的效能分析(二)-- 相關性, 安全性強度, 計算用時分析 (基於Matlab)
傳送門
相關m檔案程式碼
效能分析m檔案中使用到的函式m檔案:
- tent_mapping_once.m
- henon_mapping_once.m
- henon_mappinginv_once.m
- cmbr_encryption.m
- cmbr_decryption.m
以上m檔案的獲取可前往博文???, 或到博主的資源裡下載( 資源名字為???, 需1積分 ). 另在本文附兩個額外需要的m檔案程式碼.
計算相關係數的函式m檔案 (r_xy_near.m)
function [ r_xy, X, Y ] = r_xy_near( I, n, direction )
% 引數說明
% I -- 輸入的影像灰度矩陣
% n -- 在I中按照一定要求隨機抽取的畫素點的個數
% direction -- 將direction指定方向的畫素作為相鄰畫素
% Left: 水平向左的畫素
% Right: 水平向右的畫素
% Down: 垂直向下的畫素
% Up; 垂直向上的畫素
% Left_Up: 對角線左上角的畫素
% Left_Down: 對角線左下角的畫素
% Right_Up: 對角線右上角的畫素
% Right_Down: 對角線右下角的畫素
% r_xy -- 最終計算得到的兩個長度為n的向量X和Y之間的相關係數
% X -- 隨機抽取的畫素點的灰度值(向量)
% Y -- 隨機抽取的畫素點的相鄰點的灰度值(向量)
I = double(I);
[H, W] = size(I);
% 根據direction引數確定隨機取樣點的橫縱座標範圍
switch direction
case 'Left'
R = floor( unifrnd(1, H, [1, n]) );
C = floor( unifrnd(2, W, [1, n]) );
delta_r = 0; delta_c = -1;
case 'Right'
R = floor( unifrnd(1, H, [1, n]) );
C = floor( unifrnd(1, W-1, [1, n]) );
delta_r = 0; delta_c = 1;
case 'Up'
R = floor( unifrnd(2, H, [1, n]) );
C = floor( unifrnd(1, W, [1, n]) );
delta_r = -1; delta_c = 0;
case 'Down'
R = floor( unifrnd(1, H-1, [1, n]) );
C = floor( unifrnd(1, W, [1, n]) );
delta_r = 1; delta_c = 0;
case 'Left_Up'
R = floor( unifrnd(2, H, [1, n]) );
C = floor( unifrnd(2, W, [1, n]) );
delta_r = -1; delta_c = -1;
case 'Left_Down'
R = floor( unifrnd(1, H-1, [1, n]) );
C = floor( unifrnd(2, W, [1, n]) );
delta_r = 1; delta_c = -1;
case 'Right_Up'
R = floor( unifrnd(2, H, [1, n]) );
C = floor( unifrnd(1, W-1, [1, n]) );
delta_r = -1; delta_c = 1;
case 'Right_Down'
R = floor( unifrnd(1, H-1, [1, n]) );
C = floor( unifrnd(1, W-1, [1, n]) );
delta_r = 1; delta_c = 1;
end
X = []; Y = []; % 初始化隨機取樣點處的灰度值向量
for i = 1 : n
X(i) = I( R(i), C(i) );
Y(i) = I( R(i) + delta_r, C(i) + delta_c );
end
% 計算向量X與向量Y的相關係數
mx = mean(X); my = mean(Y);
cov_xy = mean( (X - mx) .* (Y - my) );
cov_x = mean( (X - mx) .* (X - mx) );
cov_y = mean( (Y - my) .* (Y - my) );
r_xy = cov_xy / sqrt( cov_x * cov_y );
end
效能分析的指令碼m檔案 (performance_analysis_2.m)
%% m檔案說明
% 對《混沌對映與位元重組的影像加密》一文的影像加密演算法和解密演算法的效能分析
% 以下的每個分析都需要呼叫到獨立的自定義函式檔案cmbr_encryption.m, cmbr_decryption.m
%% 相鄰畫素的相關性分析
% 需要額外呼叫函式檔案 r_xy_near.m
clear; clc; close all;
I = imread('fruit.png'); I = I(:, 1 : 323);
x0 = 0.234; S = 1280; n = 20000;
% direction = 'Left';
% direction = 'Right';
% direction = 'Up';
% direction = 'Down';
% direction = 'Left_Up';
% direction = 'Left_Down';
% direction = 'Right_Up';
direction = 'Right_Down';
[ r_xy_I, X_I, Y_I ] = r_xy_near( I, n, direction );
[ C, ~, ~ ] = cmbr_encryption( I, x0, S );
[ r_xy_C, X_C, Y_C ] = r_xy_near( C, n, direction );
figure, scatter( X_I, Y_I ); title(['明文影像', num2str(n), '對相鄰畫素的灰度值分佈']);
xlabel('(x,y)的畫素值'); ylabel('(x,y)的相鄰畫素值');
disp(['明文影像隨機取', num2str(n), '對相鄰畫素計算得相關係數: ', num2str(r_xy_I)]);
figure, scatter( X_C, Y_C ); title(['密文影像', num2str(n), '對相鄰畫素的灰度值分佈']);
xlabel('(x,y)的畫素值'); ylabel('(x,y)的相鄰畫素值');
disp(['密文影像隨機取', num2str(n), '對相鄰畫素計算得相關係數: ', num2str(r_xy_C)]);
%% 資訊熵分析
% 對於一幅密文影像, 它的理想的資訊熵的值是8.
% 呼叫Matlab自帶函式entropy( )計算資訊熵
clear; clc; close all;
I = imread('fruit.png'); I = I(:, 1 : 323);
x0 = 0.234; S = 1280;
[C, ~, ~] = cmbr_encryption( I, x0, S );
disp(['密文影像的資訊熵為: ', num2str( entropy(C) )]);
%% 加解密時間隨著尺寸的變化
clear; clc; close all;
x0 = 0.234; S = 1280;
size_sequence = 50 : 50 : 1000;
time_en = []; time_de = [];
for k = size_sequence
I = floor( rand(k, k) * 255 );
tic
[ C, ~, s ] = cmbr_encryption( I, x0, S );
toc
time_en = [time_en, toc];
tic
[ ~, ~ ] = cmbr_decryption( C, x0, s, S );
toc
time_de = [time_de, toc];
disp(['影像大小為: ', num2str(k), ' * ', num2str(k), '的加解密已完成']);
end
figure, plot(size_sequence, time_en, 'r');
title('加密演算法用時與明文影像大小的關係曲線');
xlabel('明文影像大小'); ylabel('加密演算法用時');
figure, plot(size_sequence, time_de, 'b');
title('解密演算法用時與密文影像大小的關係曲線');
xlabel('密文影像大小'); ylabel('解密演算法用時');
相鄰畫素相關性分析
評估指標
相鄰畫素的相關係數
r
r
r, 計算公式為
r
x
y
=
C
o
v
(
x
,
y
)
C
o
v
(
x
,
x
)
⋅
C
o
v
(
y
,
y
)
,
C
o
v
(
x
,
y
)
=
1
n
∑
i
=
1
n
(
x
i
−
E
(
x
)
)
(
y
i
−
E
(
y
)
)
,
E
(
x
)
=
1
n
∑
i
=
1
n
x
i
.
\begin{aligned} & {{r}_{xy}}=\frac{Cov\left( x,y \right)}{Cov\left( x,x \right)\centerdot Cov\left( y,y \right)}, \\ & Cov\left( x,y \right)=\frac{1}{n}\sum\limits_{i=1}^{n}{\left( {{x}_{i}}-E\left( x \right) \right)\left( {{y}_{i}}-E\left( y \right) \right)}, \\ & E\left( x \right)=\frac{1}{n}\sum\limits_{i=1}^{n}{{{x}_{i}}}. \\ \end{aligned}
rxy=Cov(x,x)⋅Cov(y,y)Cov(x,y),Cov(x,y)=n1i=1∑n(xi−E(x))(yi−E(y)),E(x)=n1i=1∑nxi.
其中
C
o
v
(
x
,
y
)
Cov\left( x,y \right)
Cov(x,y)是向量
x
x
x與向量
y
y
y的協方差係數,
x
i
,
y
i
{{x}_{i}},{{y}_{i}}
xi,yi是向量
x
,
y
x,y
x,y的每個分量,
n
n
n是向量
x
,
y
x,y
x,y的長度,
E
(
x
)
,
E
(
y
)
E\left( x \right),E\left( y \right)
E(x),E(y)就是向量
x
,
y
x,y
x,y各自的所有分量的均值.
r
x
y
{{r}_{xy}}
rxy的值介於
−
1
-1
−1到
1
1
1之間, 其絕對值
∣
r
x
y
∣
\left| {{r}_{xy}} \right|
∣rxy∣越接近
1
1
1, 表示向量
x
,
y
x,y
x,y的相關程度越大.
已知一般的明文影像畫素在水平, 垂直, 或對角方向上高度相關, 在密文影像中, 相鄰畫素之間的相關性應該顯著降低.
分析方法
使用以下的
323
×
323
323 \times 323
323×323的圖片素材作為明文影像.
① 將上面的明文影像
I
I
I進行加密得到密文影像
C
C
C;
② 規定好相鄰畫素位於原畫素的什麼方向 (左方, 右方, 上方, 下方, 左上方, 左下方, 右上方, 右下方);
③ 隨機在
I
I
I中抽取
n
n
n對相鄰畫素形成兩個長度均為
n
n
n的向量
X
1
,
Y
1
X_1,\text{ }Y_1
X1, Y1, 計算其相關係數
r
1
r_1
r1;
④ 對應地, 隨機在
C
C
C中抽取
n
n
n對相鄰畫素形成兩個長度均為
n
n
n的向量
X
2
,
Y
2
X_2,\text{ }Y_2
X2, Y2, 計算其相關係數
r
2
r_2
r2, 然後與
r
1
r_1
r1進行對比.
以下令
n
=
20000
n = 20000
n=20000.
實驗結果
取向左的畫素為相鄰畫素 | 取向左的畫素為相鄰畫素 |
取向右的畫素為相鄰畫素 | 取向右的畫素為相鄰畫素 |
取向上的畫素為相鄰畫素 | 取向上的畫素為相鄰畫素 |
取向下的畫素為相鄰畫素 | 取向下的畫素為相鄰畫素 |
取左上角的畫素為相鄰畫素 | 取左上角的畫素為相鄰畫素 |
取左下角的畫素為相鄰畫素 | 取左下角的畫素為相鄰畫素 |
取右上角的畫素為相鄰畫素 | 取右上角的畫素為相鄰畫素 |
取右下角的畫素為相鄰畫素 | 取右下角的畫素為相鄰畫素 |
'Left'
明文影像隨機取20000對相鄰畫素計算得相關係數: 0.97101
密文影像隨機取20000對相鄰畫素計算得相關係數: 0.0045093
'Right'
明文影像隨機取20000對相鄰畫素計算得相關係數: 0.97189
密文影像隨機取20000對相鄰畫素計算得相關係數: -0.0059508
'Up'
明文影像隨機取20000對相鄰畫素計算得相關係數: 0.96464
密文影像隨機取20000對相鄰畫素計算得相關係數: -0.0044817
'Down'
明文影像隨機取20000對相鄰畫素計算得相關係數: 0.96428
密文影像隨機取20000對相鄰畫素計算得相關係數: 0.012069
'Left_Up'
明文影像隨機取20000對相鄰畫素計算得相關係數: 0.94745
密文影像隨機取20000對相鄰畫素計算得相關係數: -0.0022895
'Left_Down'
明文影像隨機取20000對相鄰畫素計算得相關係數: 0.94837
密文影像隨機取20000對相鄰畫素計算得相關係數: -0.0056973
'Right_Up'
明文影像隨機取20000對相鄰畫素計算得相關係數: 0.94772
密文影像隨機取20000對相鄰畫素計算得相關係數: 0.014249
'Right_Down'
明文影像隨機取20000對相鄰畫素計算得相關係數: 0.94375
密文影像隨機取20000對相鄰畫素計算得相關係數: -0.0023908
實驗結果表明無論規定相鄰畫素位於原畫素的哪個方向, 明文影像的相鄰畫素與原畫素灰度值的二維分佈呈現近似線性關係, 相關係數接近1; 而密文影像的相鄰畫素與原畫素灰度值的二維分佈非常均勻, 佈滿平面, 相關係數接近0. 因此加密演算法滿足零相關, 加密效果較好, 密文影像具有更低的畫素相關性.
安全性強度
評估指標
資訊熵, 一種用來檢測加密系統安全性強度的引數, 計算公式為
H
(
m
)
=
∑
i
=
0
2
N
−
1
p
(
m
i
)
log
2
1
p
(
m
i
)
.
H\left( m \right)=\sum\limits_{i=0}^{2N-1}{p\left( {{m}_{i}} \right){{\log }_{2}}\frac{1}{p\left( {{m}_{i}} \right)}}.
H(m)=i=0∑2N−1p(mi)log2p(mi)1.
式中,
m
i
{{m}_{i}}
mi表示第
i
i
i位灰度級,
m
i
=
0
,
1
,
⋯
,
255
{{m}_{i}}=0,1,\cdots ,255
mi=0,1,⋯,255,
p
(
m
i
)
p\left( {{m}_{i}} \right)
p(mi)表示畫素值為
m
i
{{m}_{i}}
mi的概率(一般當影像畫素個數足夠多時, 可用頻率替代),
N
N
N表示在密文影像中所有畫素的個數.
對於一幅密文影像, 它的理想的資訊熵的值為8, 在這種情況下, 密文影像就不會向那些試圖獲得沒有授權訪問的任何人洩露任何有用的資訊.
分析方法
使用以下的
323
×
323
323 \times 323
323×323的圖片素材作為明文影像, 對其進行加密得到密文影像, 計算密文影像的資訊熵.
實驗結果
密文影像的資訊熵為: 7.9982
密文影像的資訊熵非常接近8, 表明加密演算法在進行對影像加密的過程中可以避免發生資訊洩露, 影像加密演算法具有良好的抗熵值分析攻擊.
影像大小與計算用時曲線
拋開對加密演算法進行理論上的複雜度分析(複雜度分析可以參考原論文), 我們想簡單研究在同一臺計算機上, 保持金鑰和其他條件不變, 加密演算法用時與輸入的明文影像大小的關係. 為了方便, 我們規定輸入的明文影像的大小是 N × N N \times N N×N的. 令 N = 50 , 100 , 150 , ⋯ , 1000 N=50,\text{ }100,\text{ }150,\text{ }\cdots ,\text{ }1000 N=50, 100, 150, ⋯, 1000, 計算加密演算法用時得到的結果如下.
歷時 0.549801 秒。
歷時 0.547340 秒。
影像大小為: 50 * 50的加解密已完成
歷時 1.837155 秒。
歷時 1.809797 秒。
影像大小為: 100 * 100的加解密已完成
歷時 4.154024 秒。
歷時 4.064169 秒。
影像大小為: 150 * 150的加解密已完成
歷時 7.362790 秒。
歷時 7.058512 秒。
影像大小為: 200 * 200的加解密已完成
歷時 11.549046 秒。
歷時 11.026304 秒。
影像大小為: 250 * 250的加解密已完成
歷時 17.058409 秒。
歷時 15.857187 秒。
影像大小為: 300 * 300的加解密已完成
歷時 22.856086 秒。
歷時 21.770861 秒。
影像大小為: 350 * 350的加解密已完成
歷時 30.244508 秒。
歷時 28.422448 秒。
影像大小為: 400 * 400的加解密已完成
歷時 38.321001 秒。
歷時 36.493705 秒。
影像大小為: 450 * 450的加解密已完成
歷時 47.782701 秒。
歷時 44.477456 秒。
影像大小為: 500 * 500的加解密已完成
歷時 58.232867 秒。
歷時 54.052163 秒。
影像大小為: 550 * 550的加解密已完成
歷時 69.501967 秒。
歷時 64.052201 秒。
影像大小為: 600 * 600的加解密已完成
歷時 81.940872 秒。
歷時 75.634364 秒。
影像大小為: 650 * 650的加解密已完成
歷時 95.774720 秒。
歷時 87.555124 秒。
影像大小為: 700 * 700的加解密已完成
歷時 111.549318 秒。
歷時 101.265168 秒。
影像大小為: 750 * 750的加解密已完成
歷時 126.735671 秒。
歷時 114.441286 秒。
影像大小為: 800 * 800的加解密已完成
歷時 144.922362 秒。
歷時 129.592058 秒。
影像大小為: 850 * 850的加解密已完成
歷時 163.219478 秒。
歷時 144.857971 秒。
影像大小為: 900 * 900的加解密已完成
歷時 182.688934 秒。
歷時 160.887248 秒。
影像大小為: 950 * 950的加解密已完成
歷時 201.769145 秒。
歷時 179.507409 秒。
影像大小為: 1000 * 1000的加解密已完成
用時-尺寸曲線與原文分析得到的複雜度
O
(
8
×
N
2
+
(
8
×
N
)
2
+
N
2
+
8
×
N
2
)
=
O
(
81
N
2
)
=
O
(
N
2
)
.
O\left( 8\times {{N}^{2}}+{{\left( 8\times N \right)}^{2}}+{{N}^{2}}+8\times {{N}^{2}} \right)=O\left( 81{{N}^{2}} \right)=O\left( {{N}^{2}} \right).
O(8×N2+(8×N)2+N2+8×N2)=O(81N2)=O(N2).
是很吻合的.
相關文章
- matlab相關性分析Matlab
- matlab影像點運算 對比度增強 對比度拉伸 灰度變換Matlab
- 關於定時器週期、頻率等相關計算定時器
- 增強邊緣計算的安全性
- 對 Chamberlain MyQ 車庫門智慧開關的安全性分析AI
- 轉錄組GO富集與微生物相關性分析Go
- 基於Python的效能分析Python
- Java String的相關性質分析Java
- MATLAB——基於影像相減的紙牌識別系統Matlab
- SCM通道模型和SCME通道模型的matlab特性模擬,對比空間相關性,時間相關性,頻率相關性模型Matlab
- 賽爾原創 | 基於連通圖的相關度計算與篇章級事件抽取事件
- 位元組跳動基於Doris的湖倉分析探索實踐
- 計算兩列的相關性
- 關於js計算非等寬字型寬度的方法JS
- matlab實現 線性拉伸某灰度影像的對比度 程式碼 對比度拉伸Matlab
- matlab影像對比度增強,拉伸和灰度變換Matlab
- 《精靈與螢火意志》的關卡設計:用相對線性的關卡打造輕度的探索體驗
- JavaScript計算字串位元組長度JavaScript字串
- 互資訊與相關性的影像配準
- 通訊原理:基於MATLAB的AM調幅分析Matlab
- 計算機如何理解事物的相關性-文件的相似度判斷計算機
- Cache與主存之間的直接對映,全相聯對映和組項聯對映以及其地址變換
- Python:對程式做效能分析及計時統計Python
- 求助 位元組跳動的 App 效能分析工作臺的 window 版本桌面APP
- 抖音與TikTok的安全性和隱私分析 - citizenlab
- 陪玩原始碼,與時間、日期相關的程式碼分析原始碼
- MATLAB R2023a:引領科學計算與資料分析的新時代 mac/win版MatlabMac
- 4A安全性分析
- PAIRDISTILL: 用於密集檢索的成對相關性蒸餾方法AI
- MATLAB影像處理imadjust()函式調節影像的對比度示例Matlab函式
- ArkTS 應用的程式碼混淆策略:提升安全性與效能
- 除法與GCD演算法的相關分析GC演算法
- 關於css屬性calc對於ie的態度CSS
- 微信安全嗎?微信MMTLS加密協議安全性分析TLS加密協議
- 位元組碼技術在模組依賴分析中的應用
- 基於Lucene查詢原理分析Elasticsearch的效能Elasticsearch
- 基於python爬蟲技術對於淘寶的資料分析的設計與實現Python爬蟲
- 關於軟體的程式碼混淆的產品對比與分析