Delphi - ALLEGED RC4

   
Vista:

ALLEGED RC4

Publicado por Mario (4 intervenciones) el 29/01/2009 15:52:56
Hola E.T. espero me disculpes por molestarte mucho
No se si recuerdas de el algoritmo ALLEGED RC4
que puse al foro para que me ayuden a traducir a delphi el lo he hecho en un boton y no me sale el resultado esperado
Es decir con este Key:= ‘sesamo’;
Y con este Mensaje := ‘d3Ir6’;
Debería arrojar este resultado EB-06-AE-F8-92
Pero me sale asi BD-DF-15-C8-CF
Esto es el codigo fuente

var
Form4: TForm4;
State: array [1..256] Of Integer;
X, Y, Index1, Index2, NMen, aux: Integer;
MensajeCifrado, Key, Mensaje: String;
implementation

{$R *.dfm}
procedure TForm4.Button1Click(Sender: TObject);
Var I: Integer;
begin
X := 0; Y := 0; Index1 := 1; Index2 := 0;
MensajeCifrado:='';
Key:='sesamo';
Mensaje:= 'd3Ir6';

for I:=0 to 255 do
State[I]:=I;
for I:=0 to 255 do
begin
Index2 := (ord(key[Index1])+ State[I]+ Index2 ) mod 256;
aux := State[I]; State[I]:= State[Index2]; State[Index2] := aux;
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;
NMen := ord(Mensaje[I+1]) XOR State[(State[X] + State[Y]) mod 256];
MensajeCifrado := MensajeCifrado + '-' + IntToHex(NMen,2);
Edit1.Text:= copy(MensajeCifrado,2,length(MensajeCifrado)-1);
End;

end;
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. (1107 intervenciones) el 29/01/2009 17:26:22
Acabo de hacer una prueba, y el mensaje encriptado está correcto, checa bien, pues veo una diferencia en el codigo debajo del begin del segundo for, en esa linea tenemos una diferencia, no se si haya más pero prueba con este codigo

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 Mario (4 intervenciones) el 29/01/2009 19:02:37
Hola ET
Una ultima pregunta como visualizo result en un Edit

lo ice asi

Edit1.Text:= result;

Pero me da error
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. (1107 intervenciones) el 29/01/2009 23:00:18
Es una función, que te regresa un string, por lo tanto su llamada es así

en un botón pones esta linea

Edit1.text:=CifrarMensajeRC4('mensaje','llave');
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 Mario (4 intervenciones) el 29/01/2009 23:27:17
Hola

Gracias E.T. ay me quedo bien
juajuajua
es un buen foro

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