以二进制形式加密字符串并嵌入图像matlab中的问题
Issues in encrypting a string in binary form and embed in image matlab
我正在做一个加密字符串并将其嵌入到图像中的项目,我的做法是将其二进制化。
当我使用 rand() 函数生成随机数据时,我的程序完全正常工作,但是当我尝试真正的字符串时,它不起作用,我如何知道它不起作用是通过比较数据在加密、嵌入和解密之前和之后,提取。
我用来生成随机数据的代码如下
%% generate binary secret data
num = 1000;
rand('seed',0); % set the seed
D = round(rand(1,num)*1); % Generate stable random numbers
我用来加密的密码是
num_D = length(D); % Find the length of the data D
Encrypt_D = D; % build a container that stores encrypted secrets
%% Generate a random 0/1 sequence of the same length as D based on the key
rand('seed',Data_key); % set the seed
E = round(rand(1,num_D)*1); % Randomly generate a 0/1 sequence of length num_D
%% XOR encryption of the original secret information D according to E
for i=1:num_D
Encrypt_D(i) = bitxor(D(i),E(i));
end
我用来替换随机生成数据的代码(上面第一段代码)
D = uint8('Hello, this is the data I want to encrypt and embed rather than randomly generated data');
D = de2bi(D,8);
D = reshape(D,[1, size(D,1)*8]);
但这不起作用,我想知道为什么,有人可以帮我解决这个问题吗?
要使用 bitxor 加密和解密字符串,您可以执行类似的操作:
% Dummy secret key:
secret_key = 1234;
% String to encrypt:
D = double('Very secret string');
D = de2bi(D,8).';
D = D(:).';
% Encryption binary array
rand('seed',secret_key); % set the seed
E = round(rand(1,numel(D))*1);
% crypted string
crypted = bitxor(D,E);
% Decrypted string
decrypted = char(sum(reshape(bitxor(crypted,E),8,[]).*(2.^(0:7)).'))
% decrypted = 'Very secret string'
最后一行做了以下事情:
- 用bitxor解密加密的二进制代码
- 二进制转十进制
- ascii 到 char 数组
我正在做一个加密字符串并将其嵌入到图像中的项目,我的做法是将其二进制化。 当我使用 rand() 函数生成随机数据时,我的程序完全正常工作,但是当我尝试真正的字符串时,它不起作用,我如何知道它不起作用是通过比较数据在加密、嵌入和解密之前和之后,提取。 我用来生成随机数据的代码如下
%% generate binary secret data
num = 1000;
rand('seed',0); % set the seed
D = round(rand(1,num)*1); % Generate stable random numbers
我用来加密的密码是
num_D = length(D); % Find the length of the data D
Encrypt_D = D; % build a container that stores encrypted secrets
%% Generate a random 0/1 sequence of the same length as D based on the key
rand('seed',Data_key); % set the seed
E = round(rand(1,num_D)*1); % Randomly generate a 0/1 sequence of length num_D
%% XOR encryption of the original secret information D according to E
for i=1:num_D
Encrypt_D(i) = bitxor(D(i),E(i));
end
我用来替换随机生成数据的代码(上面第一段代码)
D = uint8('Hello, this is the data I want to encrypt and embed rather than randomly generated data');
D = de2bi(D,8);
D = reshape(D,[1, size(D,1)*8]);
但这不起作用,我想知道为什么,有人可以帮我解决这个问题吗?
要使用 bitxor 加密和解密字符串,您可以执行类似的操作:
% Dummy secret key:
secret_key = 1234;
% String to encrypt:
D = double('Very secret string');
D = de2bi(D,8).';
D = D(:).';
% Encryption binary array
rand('seed',secret_key); % set the seed
E = round(rand(1,numel(D))*1);
% crypted string
crypted = bitxor(D,E);
% Decrypted string
decrypted = char(sum(reshape(bitxor(crypted,E),8,[]).*(2.^(0:7)).'))
% decrypted = 'Very secret string'
最后一行做了以下事情:
- 用bitxor解密加密的二进制代码
- 二进制转十进制
- ascii 到 char 数组