PDA

Ver la Versión Completa : "Stream read error" al descodificar


weke
08-05-2012, 18:51:46
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.

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:

Preparing for Delphi 2009 I (http://www.jacobthurman.com/2008/09/05/preparing-for-delphi-2009-part-1/)
Preparing for Delphi 2009 II (http://www.jacobthurman.com/2008/09/06/preparing-for-delphi-2009-part-2/)
Preparing for Delphi 2009 III (http://www.jacobthurman.com/2008/09/08/preparing-for-delphi-2009-part-3/)


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.