필터 지우기
필터 지우기

Image encryption with standard chaotic map

조회 수: 5 (최근 30일)
Asha D.
Asha D. 2021년 3월 29일
답변: Milan Bansal 2024년 4월 3일
I have code for chaotic encryption and decryption of image but after decrypting it doesn`t return original image.
Can anyone pls suggest?

답변 (1개)

Milan Bansal
Milan Bansal 2024년 4월 3일
Hi Asha D.
I understand that you are facing an issue with chaotic encryption and decryption of an image where the decrypted image does not return to the original image. The problem appears to be related to discrepancies in how the encryption and decryption processes handle the bit representations of the image data.
Ensure Consistent Bit Depth: The "encrypt" function uses a 9-bit representation "dec2bin(image,9)", which is not standard for image data and likely an error. Image data typically uses 8 bits per color channel. This discrepancy must be corrected to ensure that the decryption process accurately reverses the encryption. Please make the following modifications in the "encrypt" function as shown below to resolve the issue.
clc;clear;
I=imread('Lena.jpg');
% % I=I(1:2:end,1:2:end,1:3); %zoom out
[eI,key]=encrypt(I);
dI=decrypt(eI,key);
figure
subplot(2,2,1);imshow(I);title('origin image');
subplot(2,2,2);imshow(eI);title('encrypted image');
subplot(2,2,3);imshow(dI);title('decrypted image');
function [encrypted,key] = encrypt(image,key)
if nargin==1
key = 10*rand(1,4);
end
x=key(1);y=key(2);k=key(3);h=key(4);
[cols,rows,chans] = size(image);
kk = 2 + exp( mod(h + 10 * sin(k) + k ,2*pi));
hh = 2 + exp( mod(h + 10 * sin(k) ,2*pi));
xx = mod(x + hh * sin(y) + kk * y ,2*pi);
yy = mod(x + hh * sin(y) ,2*pi);
bitArray = dec2bin(image,8); % Modification
bitArray = [bitArray(:)];
N = size(bitArray,1);
posX = zeros(1, 2*N); posY = zeros(1, 2*N);
posX(1)=xx ; posY(1) = yy;
for i = 1 : 2*N-1
posY(i+1) = mod(posX(i) + kk * sin(posY(i)) ,2*pi);
posX(i+1) = mod(posY(i+1) + hh * posX(i) ,2*pi);
end
posX = ceil(posX*N/(2*pi)); posY = ceil(posY*N/(2*pi));
for j = [posX ; posY]
tmp = bitArray(j(1));
bitArray(j(1)) = bitArray(j(2));
bitArray(j(2)) = tmp;
end
bitArray = reshape(bitArray,N/8,8); % Modification
Array = bin2dec(bitArray);
encrypted = uint8(reshape(Array,cols,rows,chans));
end
Please refer to the following documentation links to learn more about "dec2bin" and "bin2dec" functions.
Hope this helps!

카테고리

Help CenterFile Exchange에서 Programming에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by