Delphi - ALLEGED RC4

   
Vista:

ALLEGED RC4

Publicado por Mario (4 intervenciones) el 15/01/2009 21:56:26
Hola amigos del foro
soy nuevo en delphi y trate de traducir este pseudocodigo en delphi y no lo logro
sera que pueden ayudarme?
esto Pseudocódigo encontre en este direccion

http://www.impuestos.gov.bo/Facturacion/EspAllegedRC4.pdf

FUNCION Cifrarmensajerc4(CADENA Mensaje, CADENA Key ) : CADENA

NUMERO State[256], X = 0, Y = 0, Index1 = 0, Index2 = 0 , NMen, I

CADENA Mensajecifrado = ""

INICIO

PARA I = 0 HASTA 255 HACER
State[I] = I
FIN PARA
PARA I = 0 HASTA 255 HACER
Index2 = ( ObtieneASCII(key[Index1]) + State[I] + Index2 ) MODULO 256
IntercambiaValor( State[I], State[Index2] )
Index1 = (Index1 + 1) MODULO LargoCadena(Key)
FIN PARA
PARA I = 0 HASTA LargoCadena(Mensaje)-1 HACER
X = (X + 1) MODULO 256
Y = (State[X] + Y) MODULO 256
IntercambiaValor( State[X] , State[Y] )
NMen = ObtieneASCII(Mensaje[I]) XOR State[(State[X] + State[Y]) MODULO 256]
MensajeCifrado = MensajeCifrado + "-" + RellenaCero(ConvierteAHexadecimal(NMen))
FIN PARA
RETORNAR ObtieneSubCadena(MensajeCifrado, 1, LargoCadena(MensajeCifrado) - 1);

FIN FUNCION

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ALLEGED RC4

Publicado por E.T. (1106 intervenciones) el 15/01/2009 23:51:53
En realidad no es algo complicado

FUNCtION CifrarMensajeRC4(Mensaje,Key :string) : string;
var
State:array [0..255] of integer;
X, Y , Index1 , Index2 , NMen, I, aux:integer;
MensajeCifrado :string;
function rellenacero(cadena:string):string;
begin
if length(cadena)= 1 then
cadena:='0'+cadena;
result:=cadena;
end;
begin
X := 0; Y := 0; Index1 := 0; Index2 := 0;
MensajeCifrado:='';
for I:=0 to 255 do
State[I]:=I;
for I:=0 to 255 do begin
Index2 := (ord(key[Index1+1]) + State[I] + Index2 ) mod 256;
aux := State[I];State[I]:= State[Index2];State[Index2] := aux;//IntercambiaValor
Index1 := (Index1+1) mod (length(Key));
end;
for I:=0 to length(Mensaje)-1 do begin
X := (X + 1) mod 256;
Y := (State[X] + Y) mod 256;
aux := State[X];State[X]:= State[Y];State[Y] := aux;//IntercambiaValor
NMen := ord(Mensaje[I+1]) XOR State[(State[X] + State[Y]) mod 256];
MensajeCifrado := MensajeCifrado + '-' + RellenaCero(IntToHex(NMen, 2));
end;
result := copy(MensajeCifrado,2,length(MensajeCifrado)-1);
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ALLEGED RC4

Publicado por pacopaz (104 intervenciones) el 15/01/2009 23:57:07
ET me ganó. Justo venía a poner la respuesta.
Me parecío interesante el esfuerzo por cifrar, por eso lo hice.
Nada más una observación:
La función RellenaCero pareciera innecesaria, toda vez que el segundo parámetro de IntToHex maneja esa situación (rellena con ceros a la izquierda hasta que la cadena sea de tantas posiciones).

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ALLEGED RC4

Publicado por E.T. (1106 intervenciones) el 16/01/2009 01:51:59
LOL ni me fijé en lo que decía la ayuda acerca de esta función, por eso la puse :p
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar