如何在matlab中执行xor密码

时间:2014-01-20 09:09:28

标签: matlab

我有一条纯文本消息:hello world和一个密钥:hidden。我想执行xor加密和解密.i将字符转换为二进制形式。然后使用代码xor(明文,密钥)执行xor加密,它显示错误消息维度不匹配。

如何使用重复键在matlab中执行xor加密?/////

1 个答案:

答案 0 :(得分:1)

只需将密钥(使用mod)重复到适当的大小即可。如果您已经拥有keyplaintext的二进制表示,则此基本操作有效:

xor(plaintext, key(mod(0:numel(plaintext)-1, numel(key))+1))

但是,通常你会在处理字符串输入时使用bitxor

plaintext = 'hello world'
key = 'hidden'
plaintext = char(bitxor(plaintext+0, key(mod(0:numel(plaintext+0)-1, numel(key+0))+1)+0))

你会发现,如果再次运行最后一行(使用新的纯文本结果),你会收到原始邮件。


替代方法(如果你真的想使用xor)

这是您可以将plaintextkey作为字符串输入的方法,并将加密结果作为字符串输出。

%Set the string and keystring
plaintext = 'hello world';
key = 'hidden';

% Translate your string into a logical vector
plaintext = reshape(dec2bin(plaintext,8),1,[])-'0';
key = reshape(dec2bin(key,8),1,[])-'0';

% Execute the xor operation
result = xor(plaintext, key(mod(0:numel(plaintext)-1, numel(key))+1));

%Return the result
result = char(bin2dec(char(reshape(result + '0',[],8))))'

当然我们想确保我们没有犯错,因此进行以下测试:

% Now the test whether we can decrypt it
plaintext = result;
plaintext = reshape(dec2bin(plaintext,8),1,[])-'0';
result = xor(plaintext, key(mod(0:numel(plaintext)-1, numel(key))+1));
result = char(bin2dec(char(reshape(result + '0',[],8))))'