Besoin de suggestion sur la conversion de code en Matlab_extension 1

Ceci est une extension de la question précédemment posée: lien . En résumé, j’essaie de convertir un programme C en Matlab et je vous demande votre suggestion pour améliorer le code car le code ne donne pas la sortie correcte.

Programme 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]; } } 

Programme 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)); 

MODIFIER:

Essayez ceci, faites la même chose que la fonction c: La longueur de S devrait être >= 256 vous la dépasserez, car mod() pourrait renvoyer un tel index. Je vous suggère de modifier 256 dans la fonction avec la lenght fournie pour résoudre ce problème.

Ici, vous n’avez pas besoin de la variable 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 

Ou vous pouvez utiliser la variable key pour contrôler la boucle

 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