Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   "Stream read error" al descodificar (https://www.clubdelphi.com/foros/showthread.php?t=78668)

weke 08-05-2012 18:51:46

"Stream read error" al descodificar
 
Buenas tardes,
he migrado una aplicación de Delphi 7 a Delphi 2010 y me he encontrado con un problema en una función para descodificar la contraseña de acceso a la configuración de la aplicación.
Hasta ahora la aplicación estaba funcionando correctamente pero al hacer la migración me devuelve error en la línea "Src.ReadBuffer(Size,Sizeof(Size));".

A continuación pongo el código fuente de la función a ver si es que se me está pasando algo.

Código Delphi [-]
function Descifrar(Str,Clave: AnsiString): AnsiString;
var
  Src: TMemoryStream;
  Dst: TStringStream;
  Size: Integer;
  Key: TAESKey;
  ExpandedKey: TAESExpandedKey;
begin
  Result:= ''; //Result:= EmptyStr;
  Src:= TMemoryStream.Create;
  try
    Dst:= TStringStream.Create(Str);
    try
      StrToStream(Str,Src);
      Src.Position:= 0;
      FillChar(Key,Sizeof(Key),#0);
      if Length(Clave) > Sizeof(Key) then
          move(PChar(Clave)^,Key,Sizeof(key))
      else
          move(PChar(Clave)^,Key,Length(Clave));
      AESExpandKey(ExpandedKey,Key);
      // Leemos el tamaño del texto
      Src.ReadBuffer(Size,Sizeof(Size));
      AESDecryptStreamECB(Src,Dst,ExpandedKey);
      Dst.Size:= Size;
      Result:= Dst.DataString;
    finally
      Dst.Free;
    end;
  finally
    Src.Free;
  end;
end;

Muchas gracias de antemano y un saludo.

ecfisa 09-05-2012 19:25:21

Hola weke.

En algún lado que no recuerdo, había leido que a partir de Delphi 2009 el tipo char tiene un tamaño de 2 bytes siendo que en Delphi 7 es de uno, quizá el problema pase por ahí... Lamentablemente no tengo forma de hacer ninguna prueba ya que sólo dispongo de Delphi 7.

Encontré este artículo que tal vez pueda interesarte:
Saludos. :)

weke 23-05-2012 00:14:42

Muchas gracias ecfisa,
algo parecido me pasó cando migré una dll también de delphi7 a delphi 2010, estoy revisando todo el tema de string y ansistring a ver si consigo solucionarlo.

Si consigo solucionarlo pondré el código por si alguien tiene que hacer alguna migración del mismo estilo.

Un saludo.


La franja horaria es GMT +2. Ahora son las 23:37:36.

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