matlab中双精度和整数值到逻辑数组的转换

matlab中双精度和整数值到逻辑数组的转换,matlab,xor,rc4-cipher,Matlab,Xor,Rc4 Cipher,我不熟悉matlab编程,并尝试使用RC4代码[源代码:]。我试图得到一个用密钥加密的消息,但在得到密钥流后,我在对数据进行异或运算时被卡住了。我可能在几个地方犯了错误,因为我的结果始终显示为0。我遇到的make函数代码问题是: function w = rc4make(n,k) % rc4make - makes a vector of "n" RC4 outputs of key "k" sc = rc4key(k); l = []; j0 = 0; i0 = 0; for s0 = 1:

我不熟悉matlab编程,并尝试使用RC4代码[源代码:]。我试图得到一个用密钥加密的消息,但在得到密钥流后,我在对数据进行异或运算时被卡住了。我可能在几个地方犯了错误,因为我的结果始终显示为0。我遇到的make函数代码问题是:

function w = rc4make(n,k)
% rc4make - makes a vector of "n" RC4 outputs of key "k"
sc = rc4key(k);
l = [];
j0 = 0;
i0 = 0;

for s0 = 1:n 
    [r, i0, j0, sc]=rc4out(i0, j0, sc);
    l =[l r];
    L1 = logical(n);
    disp(L1);
    L2 = logical(l);% converting into logical array 
    disp(L2);
    w = xor(L1,L2);
end

function sc=rc4key(key)
% rc4key - return key schedule array for key k
% SEEMS BROKEN - bytes 2-9 are swapped with other key schedule bytes
% At best, not compatible with 'real' RC4. At worst, also more vulnerable

% set up the array
le = length(key);
sc = 0:255;
j0 = 0;

% scramble the key schedule
for i0 = 0:255
    k0 = floor(key( floor(mod(i0,le))+1 ));%floor rounds the number into round figure
    j0 = floor(mod( j0 + k0 + sc(i0+1), 256));
    tm = sc(i0+1);
    sc(i0+1) = sc(j0+1);
    sc(j0+1) = tm;
end

function [r, i0, j0, sc]=rc4out(i0, j0, sc)
% next byte of rc4 output
% inputs: i0, j0 = indices; sc = key schedule
% outputs: r=random byte; i0, j0 = indices; sc = key schedule

%for q=0:strlen(data)
i0 = mod( (i0+1), 256);
j0 = mod( j0 + sc(i0+1), 256);
tmp = sc(j0+1);
sc(j0+1) = sc(i0+1);
sc(i0+1) = tmp;
r = mod(sc(i0+1) + sc(j0+1), 256);%(S[i]+S[j]) %256

我调用的函数是:
rc4make(12,'hi')
其中12是纯文本,hi是键。请您引导我了解代码的问题,并建议正确获取密文。

不确定您要做什么,但我认为您的循环设置不正确。n值似乎是一个常数,l似乎总是空的。r值似乎永远不会被使用。最后,除非您试图引用矩阵,否则您可能不想使用“逻辑”。谢谢您的评论。我用12作为n,现在我插入了l的值。我把整个代码放在这里是为了让你更好地理解。我不理解你的最后一行,因为我在某处读到,如果不把它转换成逻辑数组,我就不能进行异或运算。再次感谢。L1和L2的预期值/含义是什么。期望的维度是什么?我期望的结果应该是这样的:2c fd,我知道在上面的代码中可能需要做更多的事情。您可能希望在整数值数组上应用
bitxor
,而不是在逻辑数组上应用
xor