我有一条纯文本消息:hello world和一个密钥:hidden。我想执行xor加密和解密.i将字符转换为二进制形式。然后使用代码xor(明文,密钥)执行xor加密,它显示错误消息维度不匹配。
如何使用重复键在matlab中执行xor加密?/////
答案 0 :(得分:1)
只需将密钥(使用mod
)重复到适当的大小即可。如果您已经拥有key
和plaintext
的二进制表示,则此基本操作有效:
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)
这是您可以将plaintext
和key
作为字符串输入的方法,并将加密结果作为字符串输出。
%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))))'