MATLAB Answers

Info

This question is closed and may reopen in the future if edited.

Matuno
0

Ciphertext is not as desired for RC4 in Matlab

Asked by Matuno
on 26 Dec 2013
Latest activity Closed by Walter Roberson
on 26 Dec 2013

I am trying to implement an RC4 implementation in Matlab. I want to encrypt a message (e.g. 'encrypt12') with a key(e.g. 'key'). I got the key stream but didn't get the ciphertext. I have been trying for many days to use many options for the xor but nothing seems working. My code:

C code:

    #include <string.h>
    unsigned char S[256];
    char has[512];
    #define S_SWAP(a,b) do { int t = S[a]; S[a] = S[b]; S[b] = t; }
    void rc4(char *key, char *data){
     int i,j;
     for (i=0;i<256;i++){
     S[i] = i;
     }
     j = 0;
     for (i=0;i<256;i++){
     j = (j+S[i]+key[i%strlen(key)]) %256;
     S_SWAP(S[i],S[j]);
     }
     i = j = 0;
     for (int k=0;k<strlen(data);k++){
     i = (i+1) %256;
     j = (j+S[i]) %256;
     S_SWAP(S[i],S[j]);
     has[k] = data[k]^S[(S[i]+S[j]) %256];
     }
     has[strlen(data)+1] = '\0';
    }

Matlab code:

if true
  function ef = rc4 (pf,k)
sc = rc4key(k);
j0 = 0;
i0 = 0;
for s0 = 1:length(pf)
[r, i0, j0, sc]=rc4out(i0, j0, sc);
for i = 1:length(pf),
v(i)=double(pf(i))-48;
end
C = bitxor(v,r);
data_show =dec2hex(C);
ef = data_show;
end
 function sc=rc4key(key)
 le = length(key);
 sc = 0:255;
 j0 = 0;
 % scramble the key schedule
 for i0 = 0:255
  k0 = floor(key( floor(mod(i0,le))+1 ));
  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;
 ra = mod(sc(i0+1) + sc(j0+1), 256);%(S[i]+S[j]) %256
 r = sc(ra);%S(S[i]+S[j]) %256

what I am expecting: Suppose I tried 'Hello' as data and 'hi' as key. then the C and in online RC4 [http://rc4.online-domain-tools.com/] it should come like this: 55aadb210b but I am getting very strange: 09242D2D2E.

  0 Comments

Log in to comment.

0 Answers

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today