Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   [Ayuda] Algoritmo Allege RC4 (https://www.clubdelphi.com/foros/showthread.php?t=45313)

nelostanley 28-06-2007 19:20:51

[Ayuda] Algoritmo Allege RC4
 
Hola Gente,

Quisiera ver si alguien pudiera echarme una mano con este algoritmo.

El documento de referencia esta en este link.

http://www.impuestos.gov.bo/Facturac...AllegedRC4.pdf

Tengo programado los sgte, pero con la pruebas no me da el resultado requerido, quizas algo estoy haciendo mal, de antemano muchas gracias.
Código Delphi [-]
function CifrarMensajeRC4(Mensaje:string;Llave:string):string;
var
    State : array[0..255] of integer;
    x, y, Index1, Index2, NMen, i : integer;
    Cociente, Resto : integer ;
    MensajeCifrado : string ;
begin
    x := 0 ; y := 0 ; Index1 := 0 ; Index2 := 0 ; MensajeCifrado := ''; NMen := 0;
    For i:=0 to 255 do begin
        State[i]:= i;
    end;
    For i:=0 to 255 do begin
        Index2 := (Ord(Llave[Index1]) + State[i] + Index2) MOD 256;
        swapInteger(State[i],State[Index2]);
        Index1 := (Index1 + 1) MOD length(Llave);
    end;
    For i:=0 to length(Llave)-1 do begin
        x := (x + 1) MOD 256;
        y := (State[x] + y) MOD 256 ;
        swapinteger(State[x],State[y]);
        NMen := Ord(Mensaje[i]) XOR State[(State[x] + State[y]) MOD 256] ;
        MensajeCifrado := MensajeCifrado + '-' + RellenaCero(Format('%x',[NMen]));
    end;
        Result := RightStr(MensajeCifrado, (length(MensajeCifrado)-1));
end;

gabrielkc 29-06-2007 07:52:22

Saludos
 
A caray de inicio no tengo mucho tiempo........... pero viendo rapido el codigo.

Inicializas Index1 a 0 y obtienes el valor de llave[Index1] esto es llave[0] y los string en delphi inician en el indice 1.

Otra cosa la funcion RigthString no se que haga..... pero obtienes los mismos resultados con:
Copy(MensajeCifrado,2,Length(MensajeCifrado));

jcarteagaf 29-06-2007 13:34:51

Algoritmo
 
Tengo un componente para el calculo del Codigo de control de impuestos (Bolivia) si quieres ponte en contacto conmigo jcarteagaf@gmail.com

Saludos

nelostanley 29-06-2007 21:48:58

saludos
 
Gracias por su tiempo, realice los cambios de inicializar la secuencia de los string en 1 pero una pena, el calculo no es correcto aun.

seoane 29-06-2007 22:08:07

Aquí tienes el algoritmo traducido del pdf:
Código Delphi [-]
function CrifrarMensajeRC4(Mensaje, Key: String): String;
var
  State: Array[0..255] of Integer;
  X, Y, Index1, Index2: Integer;
  NMen, i,j: Integer;
begin
  Result:= '';
  X:= 0; Y:= 0;
  Index1:= 0; Index2:= 0;
  for i:= 0 to 255 do
    State[i]:= i;
  for i:= 0 to 255 do
  begin
    Index2:= (Byte(key[Index1+1]) + State[i] + Index2 ) mod 256;
    j:= State[Index2];
    State[Index2]:= State[i];
    State[i]:= j;
    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;
    j:= State[X];
    State[X]:= State[Y];
    State[Y]:= j;
    NMen:= Byte(Mensaje[I+1]) XOR State[(State[X] + State[Y]) mod 256];
    Result:= Result + '-' + IntToHex(NMen,2);
  end;
  Result:= Copy(Result,2,Length(Result));
end;

nelostanley 29-06-2007 22:14:44

gracias
 
Eres un maestro seoane, mil gracias!!! simplemente perfecto.


La franja horaria es GMT +2. Ahora son las 22:21:48.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi