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
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
>
> 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]
>
> one char in
> the string
> END PARA
>
>
>
> end FUNCION
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com