Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-06-2007
nelostanley nelostanley is offline
Miembro
 
Registrado: oct 2006
Posts: 36
Poder: 0
nelostanley Va por buen camino
[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;

Última edición por marcoszorrilla fecha: 28-06-2007 a las 23:06:59.
Responder Con Cita
  #2  
Antiguo 29-06-2007
gabrielkc gabrielkc is offline
Miembro
 
Registrado: jun 2007
Ubicación: Chihuahua Mexico
Posts: 118
Poder: 17
gabrielkc Va por buen camino
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));

Última edición por gabrielkc fecha: 29-06-2007 a las 07:56:02.
Responder Con Cita
  #3  
Antiguo 29-06-2007
Avatar de jcarteagaf
[jcarteagaf] jcarteagaf is offline
Miembro Premium
 
Registrado: abr 2006
Ubicación: La Paz, Bolivia
Posts: 651
Poder: 19
jcarteagaf Va por buen camino
Algoritmo

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

Saludos
Responder Con Cita
  #4  
Antiguo 29-06-2007
nelostanley nelostanley is offline
Miembro
 
Registrado: oct 2006
Posts: 36
Poder: 0
nelostanley Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 29-06-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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;
Responder Con Cita
  #6  
Antiguo 29-06-2007
nelostanley nelostanley is offline
Miembro
 
Registrado: oct 2006
Posts: 36
Poder: 0
nelostanley Va por buen camino
gracias

Eres un maestro seoane, mil gracias!!! simplemente perfecto.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Algoritmo!!! Ledian_Fdez C++ Builder 7 18-06-2007 22:17:50
AYUDA! no puedo terminar un algoritmo de resalto de texto en un RichEdit! Black_Ocean Varios 2 05-06-2007 10:54:00
algoritmo de ordenacion mahlon Varios 9 04-09-2006 18:05:15
Algoritmo MD5 tbolzan Varios 1 19-10-2004 15:13:47
Algoritmo o Sentencia SQL jmdd SQL 3 10-10-2003 01:17:14


La franja horaria es GMT +2. Ahora son las 05:57:21.


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
Copyright 1996-2007 Club Delphi