需要建议将代码转换为Matlab_extension 1

时间:2013-12-31 08:38:45

标签: c matlab

这是之前提出的问题的扩展:link。简而言之,我试图将一个C程序转换为Matlab并寻找你的建议来改进代码,因为代码没有给出正确的输出。

C程序:

void prga(unsigned char S[], unsigned char out[], int len) {
    int i=0,j=0,x,t;
    unsigned char key;
    for (x=0; x < len; ++x) {
        i = (i + 1) % 256;
        j = (j + S[i]) % 256;
        t = S[i];
        S[i] = S[j];
        S[j] = t;
        out[x] = S[(S[i] + S[j]) % 256];
    }
}

Matlab程序:

function [out, i, j, S]=rc4out(i, j, S)
    %for x = 1:length(key) % It should not work here as no key mentioned
        i = mod( (i+1), 256);
        j = mod( j + S(i), 256);
        t = S(i);
        S(i) = S(j+1);
        S(j+1) = t;
        out = mod(S(S(i) + S(j+1), 256));

1 个答案:

答案 0 :(得分:3)

修改

尝试这样做它与c函数一样思考:S的长度应该是>= 256,否则你将超过它,因为mod()可以返回这样的索引。我建议您使用提供的256更改功能中的lenght以解决此问题。

此处您不需要key变量。

function out = prga(S, len)
    i=0; j=0; x=[]; t=[];
    for x=0:len-1
        i = mod(i+1, 256);
        j = mod(j+S(i+1), 256);
        t = S(i+1);
        S(i+1) = S(j+1);
        S(j+1) = t;
    out(x+1) = S(mod(S(i+1)+S(j+1), 256)+1);
    end
end

或者您可以使用key变量来控制循环

function out = prga(S, key)
    i=0; j=0; x=[]; t=[];
    for x=0:length(key)-1
        i = mod(i+1, 256);
        j = mod(j+S(i+1), 256);
        t = S(i+1);
        S(i+1) = S(j+1);
        S(j+1) = t;
    out(x+1) = S(mod(S(i+1)+S(j+1), 256)+1);
    end
end