RC4 Implentation from pseudocode

Mark Smith mark at maseurope.net
Fri Jul 13 16:27:54 CDT 2007


Javier, I guess you missed my earlier post, so here it is again:

function rc4 pText, pKey
   -- initialize
   repeat with i = 0 to 255
     put i into S1[i]
   end repeat

   put 0 into i
   repeat with n = 0 to 255
     add 1 to i
     if i > length(pkey) then put 1 into i
     put charToNum(char i of pKey) into S2[n]
   end repeat

   put 0 into j
   repeat with i = 0 to 255
     put (j + S1[i] + S2[i]) mod 256 into j
     put S1[i] into temp
     put S1[j] into S1[i]
     put temp into S1[j]
   end repeat

   -- encrypt/decrypt
   put 0 into i ; put 0 into j
   repeat for each char c in pText
     put charToNum(c) into tChar

     put (i + 1) mod 256 into i
     put (j + S1[i]) mod 256 into j
     put S1[i] into temp
     put S1[j] into S1[i]
     put temp into S1[j]
     put (S1[i] + S1[j]) mod 256 into t
     put S1[t] into K

     put numToChar(tChar bitXor K) after tOutput
   end repeat

   return binToHex(tOutput)
end rc4

function binToHex pString
   repeat for each char c in pString
     get charToNum(c)
     put baseConvert(it,10,16) into tTemp
     if it < 16 then put "0" before tTemp
     put tTemp after tHex
   end repeat
   return tHex
end binToHex

Best,

Mark Smith


On 13 Jul 2007, at 20:16, Javier Miranda wrote:

> Can this "pseudocode" be implemented using Revolution? It´s an  
> encryption
> alogorithm called Alleged RC4, there are a number of base  
> convesions and
> module operations, also there is array manipulation.  Itried and  
> failed
> miserably.
>
>
> FUNCION CifrarMensajeRC4(string Mensaje, string Key ) : string
>
> NUMERO State[256], X = 0, Y = 0, Index1 = 0, Index2 = 0 , NMen, I
>
> string MensajeCifrado = ""
> INICIO
>
>
> PARA I = 0 HASTA 255 HACER
>
> State[I] = I
> FIN PARA
>
>
> PARA I = 0 to 255
>
> Index2 = ( ObtieneASCII(key[Index1]) + State[I] + Index2 ) MODULE 256
>
> IntercambiaValor( State[I], State[Index2] ) // exchange variable  
> values
>
> Index1 = (Index1 + 1) MODULO lenght(Key)
> FIN PARA
>
>
> PARA I = 0 to lenght(Mensaje)-1
>
> X = (X + 1) MODULO 256
>
> Y = (State[X] + Y) MODULE 256
>
> IntercambiaValor( State[X] , State[Y] )
>
> NMen = ObtieneASCII(Mensaje[I]) XOR State[(State[X] + State[Y])  
> MODULE 256]
>
> MensajeCifrado = MensajeCifrado + "-" +
> RellenaCero(ConvierteAHexadecimal(NMen))  // add a 0 if its only  
> one char in
> the string
> END PARA
>
>
> RETURN ObtieneSubCadena(MensajeCifrado, 1, LargoCadena 
> (MensajeCifrado) - 1);
>
> end FUNCION
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your  
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-revolution




More information about the use-livecode mailing list