RC4 Implentation from pseudocode
Mark Smith
mark at maseurope.net
Fri Jul 13 17:27:54 EDT 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