Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   List index out of bounds(6) al desencriptar (https://www.clubdelphi.com/foros/showthread.php?t=11830)

nefy 26-06-2004 16:47:59

List index out of bounds(6) al desencriptar
 
Hola tengo el siguiente problemilla, manejo una tabla de Passwords(Nombre y Contrasenya), la contraseña la encripto al guardarla en la tabla asi:
Código:

function Encryptar(const S: String; Key: Word): String;
var
  I: byte;
begin
  SetLength(Result,Length(S));
  for I := 1 to Length(S) do begin
    Result[i] := char(byte(S[i]) xor (Key shr 8));
    Key := (byte(Result[i]) + Key) * C1 + C2;
  end;
end;

y para validar una sesion desencripto el password asi:
Código:

function Desencryptar(const S: String; Key: Word): String;
  var
    I: byte;
  begin
    SetLength(Result,Length(S));
    for I := 1 to Length(S) do begin
      Result[i] := char(byte(S[i]) xor (Key shr 8));
      Key := (byte(S[i]) + Key) * C1 + C2;
    end;
  end;    //Codigo de trcuomania segun Borland

el problema que surge es q al validar un usuario que no sea el admnistrador me envia la Exeption antes mencionada, esto sin importar si el password es de uno o mas caracteres.

Nota: Ya he vaciado la tabla he insertado nuevos registros una y otra vez y ocurre lo mismo. Uso Delphi 6 y Paradox.

Salu2

nefy 26-06-2004 16:53:04

Perdon me falto añadir q C1 y C2 son constantes (C1=52845 y C2=11719).

El_Perrito 26-06-2004 17:14:30

Puedes probar con las siguientes funciones, a mi me han funcionado:

Esta es para Encriptar

function TForm1.Cifra(Const Valor:String):String;
var
Indice:Integer;
cadena:String;
begin
for Indice:=1 to Length(Valor) do begin
cadena:=cadena+chr(StrToInt(IntToStr(ord(Valor[Indice])+Constante)));
end;
Result:=cadena;
end;

Esta para Desencriptar

function TForm1.DesCifra(Const Valor:String):String;
var
Indice:Integer;
cadena:String;
begin
for Indice:=1 to Length(Valor) do begin
cadena:=cadena+chr(StrToInt(IntToStr(ord(Valor[Indice])-Constante)));
end;
Result:=cadena;
end;

Gydba 26-06-2004 17:45:09

Mirá, recién probé lo siguiente con tus rutinas y me anduvo 10 puntos:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
const
   PASSWORD = 'CLAVE PARA COLGAR ESTA APP CON UN CóDIGO LARGO';
var
   strEncriptado    : String;
   strDesEncriptado : String;
begin
   strEncriptado := Encryptar(PASSWORD, 6474);
   strDesEncriptado := Desencryptar(strEncriptado, 6474);
   ShowMessage(strEncriptado + #13 +  strDesEncriptado);
end;
Eso quiere decir que el error puede estar en la BD, pero eso entraría en otro foro ;)

jachguate 26-06-2004 21:03:55

Creo que el problema está fuera de las rutinas, que se ven bastante sanas. Revisá las líneas posteriores a su llamada..

Hasta luego.

;)

nefy 26-06-2004 21:30:27

Parece ser que quizas sea esa solucion (checar codigo alrededor), ya lo he hecho pero tratare mas haber q pasa.

Salu2.

nefy 28-06-2004 19:07:20

Pues ya cheque y la excepcion me la genera nada menos q en un locate:
Código:

  if (not TUsuarios.Locate('Nom_Usuario',nombre,[])) then
    begin
--
--
--
  end;

Ahora si que me quede sorprendido con esto, la verdad no veo la razon para q me envie dicho error aun y reintero q los envio con todos los usuarios excepto con "Administrador". Cual sera el bug?.


La franja horaria es GMT +2. Ahora son las 03:42:16.

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