How to implement SHA256 to get hash value for image?

13 次查看(过去 30 天)
I try to implement this paper:" A novel plaintext-related image encryption scheme using hyper-chaotic system"
I try to implement permutation process: I have an image and I need to implement SHA256 for sum of pixels image, then i need divide the output(256bits) of SHA256 as initial key for lorenz system. I write this code but I could'nt understand how we take output(256bits) of SHA256 as initial key for lorenz system by divid its 4 parts, every parts have many bits.
What is value of A1,A2,A3 and A4 after divided output(256bits) of SHA256 to calculat the initial conditions (Px0, Py0, Pz0, and Pw0) ???.
A1=? , A2=?, A3=?and A4=?
I need some one cooperate and help me to implement all steps in this paper and I would be grateful for your help.
%%%%%%%%%%%%%%%%%%%% code of permutation algorithm in paper :" A novel plaintext-related image encryption scheme using %hyper-chaotic system: permutation phase"
close all;
clear all;
clc;
tic
timg = imread('lena.bmp');
[row,col]=size(timg);
s=row*col;
img=reshape(timg,s,1);% 1 means 1 col to make matrix in one dim
x=sum(img);
string_img = num2str(x); % Converts numeric matrices to a string
string_img = string_img(~isspace(num2str(string_img)));
% Perform hashing
sha256hasher = System.Security.Cryptography.SHA256Managed; % Create hash object (?) - this part was copied from the forum post mentioned above, so no idea what it actually does
imageHash_uint8 = uint8(sha256hasher.ComputeHash(uint8(string_img))); % Find uint8 of hash, outputs as a 1x32 uint8 array
imageHash_hex = dec2hex(imageHash_uint8);
imageHash_bin=uint8(dec2bin(imageHash_uint8));
% let's say tha the initial key is :
initial_key_hex=['FE', 'DC' 'BA' '98' '76' '54' '32' '10' '12' '34' '56' '78' '9A' 'BC' 'DE' 'FE'];
% calculate IC1
sha256hasher2 = System.Security.Cryptography.SHA256Managed; % Create hash object (?) - this part was copied from the forum post mentioned above, so no idea what it actually does
keyHash_uint8 = uint8(sha256hasher.ComputeHash(uint8(initial_key_hex))); % Find uint8 of hash, outputs as a 1x32 uint8 array
keyHash_hex = dec2hex(keyHash_uint8);
keyHash_bin=uint8(dec2bin(keyHash_uint8));
IC1=bitxor(imageHash_bin,keyHash_bin);
% calculate IC2
string_ic1= num2str(IC1);
sha256hasher3 = System.Security.Cryptography.SHA256Managed; % Create hash object (?) - this part was copied from the forum post mentioned above, so no idea what it actually does
IC2Hash_uint8 = uint8(sha256hasher.ComputeHash(uint8(initial_key_hex))); % Find uint8 of hash, outputs as a 1x32 uint8 array
IC2Hash_hex = dec2hex(IC2Hash_uint8);
IC2Hash_bin=(dec2bin(IC2Hash_uint8));
% Split IC2 into four parts, and every part with 64 bits,
%denoted as A1, A2, A3, and A4.
A1=(IC2Hash_bin(1:8,:));
A2=IC2Hash_bin(9:16,:);
A3=IC2Hash_bin(17:24,:);
A4=IC2Hash_bin(25:32,:);
% The initial conditions (Px0, Py0, Pz0, and Pw0)
%of hyper-chaotic Lorenz system given in Eq. (2) are generated by:
px0=(mod(fix(A1/(10^8)),80)-40)+(A1/(10^14)-fix(A1/(10^14)));
py0=(mod(fix(A2/(10^8)),80)-40)+(A2/(10^14)-fix(A2/(10^14)));
pz0=(mod(fix(A3/(10^8)),80)-40)+(A3/(10^14)-fix(A3/(10^14)));
pw0=(mod(fix(A4/(10^8)),80)-40)+(A4/(10^14)-fix(A4/(10^14)));
  3 个评论
Arshub
Arshub 2021-12-16
编辑:Arshub 2021-12-16
@Jan I could'nt implement the equations bellow to get values of px0,py0,pz0,pw0 because the value of A1,A2,A3,A4 is more than one value from previous step, it is a sequence of 64 bits
% The initial conditions (Px0, Py0, Pz0, and Pw0)
%of hyper-chaotic Lorenz system given in Eq. (2) are generated by:
px0=(mod(fix(A1/(10^8)),80)-40)+(A1/(10^14)-fix(A1/(10^14)));
py0=(mod(fix(A2/(10^8)),80)-40)+(A2/(10^14)-fix(A2/(10^14)));
pz0=(mod(fix(A3/(10^8)),80)-40)+(A3/(10^14)-fix(A3/(10^14)));
pw0=(mod(fix(A4/(10^8)),80)-40)+(A4/(10^14)-fix(A4/(10^14)));
the algorithm in paper say that , divid output of hash to A1,A2,A3,A4 each value is 64bits.
and the next step is get the value of px0,py0,pz0,pw0 by use value of A1,A2,A3,A4.
how can we timplement this equations in this state?
Jan
Jan 2021-12-17
编辑:Jan 2021-12-17
I do not know the paper.
Are you sure, that you need the UINT8, Hex and decimal representation of the hash? If A1 are really the decimal value of the UINT8 value, dividing it by 1e8 and 1e14 is meaningless, because all values are vanishing then.
This does not look correct:
IC2Hash_uint8 = uint8(sha256hasher.ComputeHash(uint8(initial_key_hex)));
IC2Hash_bin=(dec2bin(IC2Hash_uint8));
A1=(IC2Hash_bin(1:8,:));
I assume, that the paper uses another method.

请先登录,再进行评论。

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

产品


版本

R2014a

Community Treasure Hunt

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

Start Hunting!

Translated by